EDITORIAL
EQUIPA PROGRAMAR Hacktivismo
Coordenadores Segundo a Wikipédia a palavra hacktivismo vem da junção entre Hack e
António Silva Activism (Hacktivism em inglês), e nos últimos tempos tem sido bastante
Fernando Martins usado por muitos. Em cerca de um mês e meio a Sony foi atacada pelo
menos quatro vezes, e pelo menos inicialmente o suposto motivo era o
Editor hacktivismo, e a Sony chegou mesmo a acusar o grupo Anonymous
Igor Nunes referiram que nada tinham a ver com o roubo de informação de clientes da
Sony.
Design Ainda no ano passado este grupo de Hackers e Activistas tinha sido notícia
Sérgio Alves (@scorpion_blood) pelos ataques perpetrados contra servidores das empresas que tinham
retirado o apoio ao Wikileaks, como a Amazon, Visa, MasterCard, PayPal,
Redacção até o banco suíço PostFinance onde estava a conta de doações do
Augusto Manzano, Caio Proiete, Wikileaks depois de ter cancelado a conta de Julian Assange foi atacado.
Fernando Martins, Fábio Domingos, Também membros do senado Norte-Americano e do Ministério Público
Nuno Godinho, Pedro Martins,
Ricardo Rodrigues, Sandro Pereira, Sueco foram atacados com a mesma razão.
Sara Silva Recentemente veio a público que o Departamento de Defesa Norte-
Americano pretende avançar com a retaliação aos ataques cibernéticos com
Staff armas convencionais, que poderão ir até ao lançamento de mísseis. Sim,
António Santos, Fábio Domingos, leu bem, em último caso poderão ser lançados mísseis contra este tipo de
Jorge Paulino, Marco Marques criminosos. Mas a grande questão, é como terão eles a certeza da
identidade do criminoso, e quantas serão as vítimas inocentes. Todos nós
Contacto conhecemos maneiras mais ou menos eficazes de ocultar a nossa
revistaprogramar@portugal-a-programar.org identidade completamente na Internet, ou pelo menos tornar a sua
descoberta muito mais difícil. Mas o Departamento de Defesa Norte-
Website Americano parece ter uma plena confiança nas suas capacidades para
http://www.revista-programar.info detectar estas origens, o problema será quando surgirem as mortes de
inocentesi
ISSN O primeiro grande ataque conhecido, foi o worm anti-nuclear WANK, em
1 647-071 0 1 989, que atingiu agências americanas como a NASA, o Departamento de
Energia, entre outros. Mas não é só lá fora que isto acontece, em 1 997, um
grupo português atacou sites da Indonésia, incluindo sites governamentais e
militares, pelo facto de a Indonésia ter invadido Timor Leste. Esse mesmo
ataque foi repetido um ano mais tarde, em 1 998. Este foi sem dúvida um
dos primeiros grandes ataques massivos na história da internet.
Será que no futuro em vez de armas nucleares ou termonucleares, teremos
que temer a Internet por ser a melhor arma de destruição de países? Ou
nunca chegaremos a este ponto?
NR: Quero desde já agradecer ao Igor Nunes por ter aceite o cargo de
editor da Revista PROGRAMAR, e desejo-lhe um óptimo trabalho.
António Silva
A revista PROGRAMAR é um projecto voluntário, sem fins lucrativos. Todos os artigos são da responsabilidade dos autores, não podendo a revista ou a
comunidade ser responsabilizada por alguma imprecisão ou erro. Para qualquer dúvida ou esclarecimento poderá sempre contactar-nos.
2
Índice
INDICE
TEMA DE CAPA
6 Git - Controlo de Versões para Pequenos e Grandes Projectos
Um artigo que descreve funcionalidades do Git, bem como as principais diferenças entre os sistemas de controlo de
versões centralizados e distribuídos. Caio Proiete
A PROGRAMAR
24 Lua – Linguagem de Programação (Parte 9)
A continuação de um excelente artigo sobre Lua, uma linguagem de programação pouco conhecida. Nesta nona parte
descubra tudo sobre o operador lógico XOR e os Módulos. Augusto Manzano
COLUNAS
50 CORE DUMP - Fazer mal = Rápido?
Um artigo de opinião sobre o problema de não se criar as melhores soluções devido à falta de tempo no mundo da
programação. Afinal, fazer mal é mais rápido que fazer bem? As consequências não se sobrepõem? Fernando Martins
COMUNIDADES
58 NetPonto - Certificações Microsoft
Qual o percurso a percorrer para obter a sua Certificação Microsoft? Conheça as Certificações existentes, as hierarquias,
os benefícios e como obtê-las. Sara Silva
EVENTOS
1 8 Jun. Reunião presencial Comunidade NetPonto - Lisboa
21 Jun. XII Encontro da Comunidade SQLPort
29 Jun. Windows Phone 7 “Mango” Dev Hub - Lisboa
09 Jul. Reunião presencial Comunidade NetPonto - Coimbra
22 Jul. IOI'201 1 - 23ª Olimpíadas Internacionais de Informática
23 Jul. Reunião presencial Comunidade NetPonto - Lisboa
Para mais informações/eventos: http://bit.ly/PAP_Eventos
3
Noticias
NOTICIAS
R e d e s d a PT j á e stã o La n ç a m e n to d o U b u n tu 1 1 . 0 4
p re p a ra d a s p a ra o I Pv6
Um comunicado da PT refere que as redes que suportam o No fim do mês de Abril foi lançada a nova versão do
Meo, a TMN, e o Sapo ADSL já se encontram aptas a Ubuntu, a Natty Narwhal (1 1 .04), onde uma das suas
funcionar tanto em IPv4 (a norma que ainda domina nos principais novidades é a inclusão do Unity, que dá ao
endereços de Internet) como em IPv6. Para o processo de ambiente gráfico um aspecto renovado, correndo no
migração ficar concluído falta ainda proceder à adaptação entanto por cima do GNOME.
para a versão 6 do IP dos terminais e equipamentos dos
clientes da operadora. A PT definiu como objetivo a A versão 1 1 .1 0 (Oneiric Ocelot) já está agendada para
migração dos clientes empresariais para o IPv6 até ao final Outubro deste mesmo ano e a vresão Alpha 1 que já foi
de 201 1 , mas não adianta qualquer data para adaptação lançada conta já com a implementação do GNOME 3 e com
dos equipamentos usados pelos clientes residenciais. o Firefox 5 Beta. Conta também tal como a versão anterior,
Uma vez que nem todos os intervenientes conseguem a 1 1 .04, com o LibreOffice ao invés do OpenOffice.
trabalhar à mesma velocidade, a rede da PT vai seguir a
tendência mundial e passar a funcionar em dual stack que Mais informação:
garante a compatibilidade com IPv4 e IPv6. https://wiki.ubuntu.com/OneiricOcelot/TechnicalOverview/Al
A migração para o IPv6 começou a ser trabalhada na PT há pha1
cerca de três anos, com o objetivo de acautelar o provável
esgotamento dos 4,3 mil milhões endereços
disponibilizados pela IPv4.
TM N te sta re d e 4G e m B ra ga M i c ro s o ft a p re s e n ta
Wi n d o ws 8
A TMN iniciou no mês de Maio as primeiras demonstrações Na conferência D9, na Califórnia, a Microsoft levantou o
de redes da quarta geração de telemóveis (4G) em Braga. véu sobre a nova inteface gráfica do Windows 8 que
representa, talvez, a maior mudança na interface do
A TMN optou por fazer a demonstração pública do 4G no sistema operativo da Microsoft. Ao contrário do que
Shopping Braga Parque. A demonstração, que deu a acontece agora, o ecrã principal apresenta agora uma série
conhecer o potencial dos 1 50 Mbps do protocolo LTE (Long de "tiles", os tais retângulos com informação a ser
Term Evolution), abrange os serviços Meo Online, Meo atualizada em tempo real, tal como acontece com o
Jogos, Videoconferências, e transmissões de vários vídeos Windows Phone 7.
em simultâneo. As demonstrações foram realizadas com
tecnologias de rede fornecidas pela Nokia Siemens. A empresa de Redmond diz que o Windows 8 será
compatível com todos os periféricos e dispositivos que
É a segunda vez que a TMN procede a demonstrações neste momento correm no Windows 7, apesar de a
públicas das redes LTE: a primeira decorreu em Abril num interface ter sido redesenhada e repensada.
centro comercial de Cascais.
Ver o Vídeo: http://bit.ly/iMPq0A
4
TEMA DE CAPA
Git: Controlo de Versões para Pequenos e Grandes
Projectos
TEMA DE CAPA
G i t: C o n tro l o d e Ve rs õ e s p a ra Pe q u e n o s e
G ra n d e s Pro j e c to s
O Git é um sistema de controlo de versões distribuído, Centralizado vs Distríbuido
gratuito e open-source, desenvolvido originalmente pelo
Linus Torvalds, o criador do kernel do sistema operativo O Subversion (SVN), o Visual Source Safe (VSS), o Team
Linux, e actualmente é mantido pelo Junio Hamano Foundation Server (TFS), e muitos outros, são todos
juntamente com outros quase 300 colaboradores sistemas de controlo de versões que funcionam de forma
voluntários. centralizada, isto é, existe sempre um computador central
(servidor) que contém toda a história dos projectos com
todas as inclusões e alterações que foram feitas pelos
programadores desde o momento em que o projecto foi
incluído no sistema de controlo de versões (geralmente no
início do projecto) até a versão mais recente, e cada
programador tem apenas *uma* versão da aplicação em
seu próprio computador, normalmente a mais versão
recente.
Comparado com outros sistemas de controlo de versões
tradicionais, o Git diferencia-se por ser extremamente Dessa forma, os programadores estão sempre
rápido, por simplificar o desenvolvimento de software de dependentes do servidor para guardar (check-in) alterações
forma não-linear, onde podemos trabalhar em paralelo em que desenvolvem em seus computadores, bem como para
diferentes funcionalidades das aplicações que obter as alterações desenvolvidas por outros membros da
desenvolvemos e então escolher quais funcionalidades equipa:
devem fazer parte de cada versão da aplicação conforme o
nosso fluxo de trabalho, e principalmente por ser um
sistema distribuído bastante versátil e adequado para
projectos de qualquer dimensão.
6
TEMA DE CAPA
G i t: C o n tro l o d e Ve rs õ e s p a ra Pe q u e n o s e G ra n d e s Pro j e c to s
controlar versões quando se está desconectado da rede No entanto, ao trabalhar em equipas com várias pessoas,
onde encontra-se o servidor central, o que pode ser um ao invés de cada pessoa comunicar-se individualmente
problema quando é preciso trabalhar fora das instalações com outra para enviar/receber commits, é normal existir um
da empresa e não possibilidades de conectar-se sítio comum onde os elementos da equipa enviam os seus
remotamente à rede da empresa, por exemplo nas commits para que sejam partilhados com o restante da
instalações de um cliente ou em viagens. equipa, sendo este sítio comum normalmente conhecido
como “servidor de integração”.
7
TEMA DE CAPA
G i t: C o n tro l o d e Ve rs õ e s p a ra Pe q u e n o s e G ra n d e s Pro j e c to s
Uma pasta só considerada um repositório Git, após Neste artigo, vou demonstrar a instalação e configuração
executarmos um comando específico (init) para que o Git do msysGit, que no momento em que escrevo este texto
inicialize a pasta como um repositório, e normalmente está na versão 1 .7.5.4.
criamos um repositório Git para cada projecto que
desenvolvemos, de forma a controlar as versões dos
conteúdos de cada projecto separadamente.
8
TEMA DE CAPA
G i t: C o n tro l o d e Ve rs õ e s p a ra Pe q u e n o s e G ra n d e s Pro j e c to s
9
TEMA DE CAPA
G i t: C o n tro l o d e Ve rs õ e s p a ra Pe q u e n o s e G ra n d e s Pro j e c to s
Os parâmetros globais a serem definidos são o user.name Controlo de Versões com o Git
e o user.email, que correspondem ao nome e ao e-mail do
utilizador, respectivamente, e para efectuar a configuração, Criação de um Repositório Git
basta executar os comandos abaixo, substituindo os
valores entre aspas pelo nome e e-mail do utilizador: Depois de configurar o nome e o e-mail padrão, o próximo
passo escolher a pasta onde irá criar um repositorio Git, ou
$ g i t c on fi g --g l oba l u s er. n a me " S eu N ome" criá-la caso ainda não exista.
$ g i t c on fi g --g l oba l u s er. ema i l " s eu @ema i l . pt"
Para este exemplo, o repositório Git estará localizado na
pasta C:\Projectos\Portugal-a-Programar\, e assumo que
esta pasta ainda não exista, portanto podem ser criadas
através do Windows Explorer se preferir, ou directamente
através do Git Bash, utilizando alguns comandos existentes
para o efeito:
10
TEMA DE CAPA
G i t: C o n tro l o d e Ve rs õ e s p a ra Pe q u e n o s e G ra n d e s Pro j e c to s
11
TEMA DE CAPA
G i t: C o n tro l o d e Ve rs õ e s p a ra Pe q u e n o s e G ra n d e s Pro j e c to s
O comando utilizado para adicionar ficheiros (ou parte de Para efectuar o commit, deve utilizar o comando “git
um ficheiro) à staging area é o comando “git add”, e depois commit” e pode opcionalmente utilizar o parâmetro “-m” e
de adicionar todas as alterações na staging area, deve informar a descrição do commit. Se não utilizar o parâmetro
executar o comando “git commit” para transformar todas as “-m” o Git irá executar o editor de texto padrão configurado
alterações adicionadas na staging area em um commit. para que possa informar a mensagem a descrever as
alterações contidas no commit.
O comando “git add” pode receber diferentes parâmetros, e
permite adicionar ficheiros individualmente, todos os $ g i t c ommi t -m " Ad i c i on a fu n c i on a l i d a d e X"
ficheiros alterados ou novos que encontrar, conteúdos de
ficheiros, entre outras opções.
12
TEMA DE CAPA
G i t: C o n tro l o d e Ve rs õ e s p a ra Pe q u e n o s e G ra n d e s Pro j e c to s
$ gi t add .
Ignorar ficheiros e pastas com o .gitignore
Ao consultar o estado do repositório, verá que todos os
Por padrão, o Git permite controlar as versões de qualquer
ficheiros estão seleccionados para fazerem parte do
tipo de ficheiro que existir dentro da pasta (ou sub-pastas)
próximo commit:
onde está o repositório, mas nem sempre queremos
controlar as versões de todos os tipos de ficheiro.
14
TEMA DE CAPA
G i t: C o n tro l o d e Ve rs õ e s p a ra Pe q u e n o s e G ra n d e s Pro j e c to s
15
TEMA DE CAPA
G i t: C o n tro l o d e Ve rs õ e s p a ra Pe q u e n o s e G ra n d e s Pro j e c to s
16
TEMA DE CAPA
G i t: C o n tro l o d e Ve rs õ e s p a ra Pe q u e n o s e G ra n d e s Pro j e c to s
Desta forma, é possível continuar a efectuar commits neste Existem outros tipos de merge, e em alguns casos um
branch sem comprometer as versões que estão em merge pode causar conflitos, por exemplo, caso as
paralelo e correspondem aos outros ambientes, e apenas mesmas linhas de um ficheiro tenha sido alteradas por
quando for apropriado, poderá juntar os commits commits diferentes, e pode necessitar de intervenção
efectuados em uma branch, com outra. manual do developer, e que normalmente utiliza uma
ferramenta para auxiliar a resolução de conflitos. Este é um
A utilização de branches no Git é tão simples e tão rápida, assunto que merece um artigo próprio, que ficará para uma
que muitos developers adoptam uma convenção conhecida próxima edição desta revista.
como “branch-per-feature”, onde criam novas branches
17
TEMA DE CAPA
G i t: C o n tro l o d e Ve rs õ e s p a ra Pe q u e n o s e G ra n d e s Pro j e c to s
18
TEMA DE CAPA
G i t: C o n tro l o d e Ve rs õ e s p a ra Pe q u e n o s e G ra n d e s Pro j e c to s
19
TEMA DE CAPA
G i t: C o n tro l o d e Ve rs õ e s p a ra Pe q u e n o s e G ra n d e s Pro j e c to s
20
TEMA DE CAPA
G i t: C o n tro l o d e Ve rs õ e s p a ra Pe q u e n o s e G ra n d e s Pro j e c to s
Integration Manager
gratuitos com até 300 Mb, para quem pretende desenvolver Uma lista mais detalhada de projectos que utilizam o Git
software open-source, e oferece também a possibilidade de está disponível no Wiki do Git em
criar repositórios privados para empresas que queiram ter https://git.wiki.kernel.org/index.php/GitProjects, e pode
repositórios privados partilhados e não possui infra- acompanhar os projectos open-source mais populares no
estrutura própria com preços que variam entre os $7 e $22 GitHub em https://github.com/popular/watched.
dólares americanos por mês no momento em que escrevo
este artigo. Em Abril de 201 1 , o GitHub ultrapassava os 2 Links para Referência
milhões de repositórios.
Git Scm - Site oficial do Git
Outros exemplos serviços que oferecem serviços http://git-scm.com
semelhantes são: Posts sobre Git em meu blog
Gitorious (http://gitorious.org) http://caioproiete.net/pt/tag/git/
Unfuddle (http://unfuddle.com) Vídeo: Controlo de Versões Distribuído com Git
ProjectLocker (http://www.projectlocker.com) http://vimeo.com/20652754
RepositoryHosting (http://repositoryhosting.com) Pro Git (e-book)
Assembla (http://www.assembla.com ) http://progit.org
Git Ready (tutorial / tips)
http://www.gitready.com
Exemplos de Grandes Projectos que Git Magic (e-book)
Utilizam o Git http://www-cs-students.stanford.edu/~blynn/gitmagic
Git for Beginners
O Git é amplamente utilizado em projectos open-source em http://stackoverflow.com/questions/31 591 1 /git-for-
todo o mundo, em pequenos, médios e grandes projectos, beginners-the-definitive-practical-guide
e foi originalmente desenvolvido para controlar as versões Why Git is Better than X
do kernel do Linux e desde a sua primeira versão continua http://whygitisbetterthanx.com
a ser utilizado para tal. Git Is Your Friend not a Foe
http://hades.name/blog/201 0/01 /1 7/git-your-friend-not-foe
Alguns projectos populares que utilizam Git para controlo A successful Git branching model
de versões, além do kernel Linux, são: Ruby on Rails, http://nvie.com/posts/a-successful-git-branching-model
Node.js, jQuery, Modernizr, Scriptaculous, Android, Use Git For What It Is Not Intended (UGFWIINI)
CakePHP, Sinatra, VLC, entre muitos outros, e o próprio http://thread.gmane.org/gmane.comp.version-
Git. Exacto! O controlo de versões do código-fonte do Git é control.git/1 1 041 1
feito através do próprio Git.
AUTOR
22
A PROGRAMAR
Lua – Linguagem de Programação (Parte 9)
I n tro d . C l o u d C o m p u ti n g e à Pl a ta fo rm a Wi n d o ws Azu re
M a n a ge d E xte n s i b i l i ty Fra m e wo rk ( M E F) e AJ AX
O E d i to r d e te xto VI M
A PROGRAMAR
l oc a l TE M PO = os . c l oc k( )
A título de ilustração sobre recursos variados que podem
ser utilizados na linguagem Lua segue alguns poucos
for I = 1 , 1 000, 1 d o
exemplos, como: modo de limpeza do ecrã e medição do
R = N * I
tempo de CPU.
i o. wri te( s tri n g . forma t( " %4d " , N ) )
i o. wri te( " X " )
Uma forma de efectuar limpeza do ecrã (tela, monitor ou
i o. wri te( s tri n g . forma t( " %4d " , I ) )
monitor de vídeo no Brasil) é executar o comando cls na
i o. wri te( " = " )
janela de prompt de comando do Microsoft Windows (modo
i o. wri te( s tri n g . forma t( " %5d " , R) )
MS-DOS) ou o comando clear na janela de comando do
i o. wri te( " \n " )
Linux/UNIX. Outra maneira é por meio de uso dos recursos
en d
de terminal ANSI, mas este será assunto para outro
momento.
l oc a l R = os . c l oc k( ) - TE M PO
24
A PROGRAMAR
Lu a – Li n gu a ge m d e Pro gra m a ç ã o ( Pa rte 9 )
OPERADOR XOR
No sentido de exemplificar o uso da acção de aplicação do
Na linguagem de programação Lua não há a existência do conceito do operador lógico xor (ou exclusivo) em Lua
operador lógico xor como não há tal operador também na considere um programa que efectue a entrada dos nomes e
linguagem C, a não ser quando se trabalha com operações sexos de duas pessoas que pretendem formar um par para
de mais baixo nível com a manipulação de bits por meio do participar de uma dança de quadrilha. Os administradores
operador “^”. da festa determinaram que somente serão aceitos pares de
sexos heterogéneos. Não serão aceitos casais formados
A não existência do operador lógico xor não desmerece em por pessoas do mesmo sexo. Para atender a condição
nada a linguagem Lua, mas parece criar em alguns estabelecida o programa deve, após a entrada do sexo dos
programadores certo desconforto por não conhecerem ou participantes, verificar se formam par, e neste caso
não saberem como resolver a questão. apresentar uma mensagem informando esta possibilidade.
Caso não seja a condição verdadeira o programa deve
Apesar de ser uma solução muito simples e de certa indicar a impossibilidade da composição do par de dança.
maneira fácil de ser encontrada em bons livros, sítios ou Observe que serão aceitos pares caso o sexo do 1 º
blogs que tratam sobre o tema da programação de participante seja masculino e do 2º participante for feminino
computadores cabe neste espaço mostrar a solução para a ou vice-versa. Assim sendo, considere como exemplo o
linguagem Lua, que nada mais é do que uma solução seguinte código de programa:
meramente matemática.
i o. wri te( " N ome 1 o. d a n c a ri n o: " )
O operador lógico XOR retorna o resultado verdadeiro N 1 = i o. rea d ( )
quando apenas, e tão-somente, uma das condições da repea t
expressão lógica é verdadeira. No caso em que as i o. wri te( " S exo 1 o. d a n c a ri n o: " )
condições avaliadas sejam todas falsas ou verdadeiras o S 1 = s tri n g . u pper( i o. rea d ( ) )
resultado da expressão lógica será falso. Assim sendo, u n ti l ( S 1 == " M " ) or ( S 1 == " F " )
considere a tabela verdade a seguir para o operador lógico
xor: i o. wri te( " N ome 2 o. d a n c a ri n o: " )
N 2 = i o. rea d ( )
Condição 1 Condição 2 Resultado lógico repea t
Verdadeiro Verdadeiro Falso i o. wri te( " S exo 2 o. d a n c a ri n o: " )
Verdadeiro Falso Verdadeiro S 2 = s tri n g . u pper( i o. rea d ( ) )
Falso Verdadeiro Verdadeiro u n ti l ( S 2 == " F " ) or ( S 2 == " M " )
Falso Falso Falso
i f ( S 1 == " M " ) a n d ( S 2 == " F " ) or
A solução para uso da expressão lógica: (C1 ) xor (C2) em ( S 1 == " M " ) a n d ( S 2 == " F " ) or
uma linguagem de programação, onde C1 e C2 são ( S 1 == " F " ) a n d ( S 2 == " M " ) or
condições a serem avaliadas é usar a expressão lógica (C1 ( S 1 == " F " ) a n d ( S 2 == " M " ) th en
and (not C2)) or ((not C1 ) and C2). pri n t( N 1 . . " d a n c a c om " . . N 2 )
el s e
No entanto, o uso desta expressão lógica na linguagem Lua pri n t( N 1 . . " n a o d a n c a c om " . . N 2 )
não surte o efeito esperado. Isto posto, passa-se a ter outro en d
problema a ser resolvido. Como então fazer o uso de tal -- fi m d o prog ra ma OPE R_XOR
necessidade? Uma solução é recorrer a um método no ( S 1 == " M " ) a n d ( S 2 == " F " ) or
estilo “força bruta” .
25
A PROGRAMAR
Lu a – Li n gu a ge m d e Pro gra m a ç ã o ( Pa rte 9 )
Em seguida escreva o código de programa em um editor de • debug : funções para processo de depuração;
texto, gravando-o com o nome oper_xor.lua e execute-o • io: possui as funções para as operações de entrada e
com a linha de comando lua 5.1 oper_xor.lua. saída;
• math : possui as funções para o uso de operações
Observe no programa o uso da instrução de laço matemáticas;
repeatiuntil na entrada dos sexos dos participantes no • os : funções que facilitam operações com o sistema
sentido de evitar que ocorram entradas de sexo que não operacional;
sejam M para masculino ou F para feminino. Outro detalhe • package: possui funções para o tratamento de módulos;
a ser observado é o uso da função string.upper() que • string : possui as funções que manipulam cadeias de
formata uma entrada de texto para maiúsculo. caracteres;
• table: possui as funções para a manipulação de tabelas.
O trecho escrito entre a instrução ifithen faz o uso de uma
acção de força bruta para a simulação da execução do Os módulos padrão da linguagem Lua são
operador lógico xor com o trecho de código seguinte. automaticamente carregados quando do uso do
interpretador. Não havendo necessidade de uso da função
( S 1 == " M " ) a n d ( S 2 == " F " ) or require().
( S 1 == " F " ) a n d ( S 2 == " M " ) or
( S 1 == " F " ) a n d ( S 2 == " M " ) O uso da função require() é obrigatório quando da definição
-- i n i c i o d o prog ra ma M ODU L O01 e uso de uma biblioteca externa e particular criada pelo
programador para atender as suas própria necessidades.
Para fazer uso de módulos de forma simples considere
A solução indicada pode não ser elegante, mas é funcional como exemplo o seguinte código de programa:
e atende a necessidade de solução do problema, pois
quem programa um computador é um programador e não a Grave o código do programa anterior com o nome
linguagem em si. modulo01 .lua.
MÓDULOS
fu n c ti on s a u d a c a o( N OM E )
Na estrutura operacional de Lua chama-se módulo a pri n t( " Ol á , " . . N OM E )
biblioteca de funções e variáveis externa contidas em uma en d
tabela de cunho global utilizada por meio da função
require(). fu n c ti on ra i z ( BAS E , I N DI CE )
l oc a l X = BAS E ^ ( 1 / I N DI CE )
Há também a possibilidade de se trabalhar com módulos a retu rn X
partir da função module(), mas este não será o foco tratado en d
neste artigo.
-- fi m d o prog ra ma M ODU L O01
A linguagem Lua possui alguns módulos em sua biblioteca -- i n i c i o d o prog ra ma M ODU L O02
padrão (biblioteca interna), sendo:
26
A PROGRAMAR
Lu a – Li n gu a ge m d e Pro gra m a ç ã o ( Pa rte 9 )
mesmo local do programa modulo01 .lua e execute-o com a É possível encontrar na Internet bibliotecas para a
linha de comando lua 5.1 modulo02.lua. linguagem Lua disponibilizadas por outros programadores.
Caso interesse-se por este tema poderás consultar o sítio
Ao ser o programa modulo02.lua executado será aberto o http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/ o qual encontrava-
acesso a biblioteca modulo01 por meio da execução da se no ar até Abril de 201 1 quando este artigo estava sendo
linha de código require("modulo01 "). finalizado.
req u i re( " mod u l o01 " ) As bibliotecas externas para uso em na linguagem Lua
poderão possuir a extensões de identificação .lua ou .so
pri n t( " S ej a bem vi n d o, vi s i ta n te" ) (ou .dll no caso do sistema operacional da Microsoft).
i o. wri te( " I n forme s e n ome: " )
N = i o. rea d ( )
s a u d a c a o( N ) CONCLUSÃO
i o. wri te( " M e d e u ma ba s e . . . . . : " ) Neste artigo foi visto os procedimentos de uso e criação de
B = i o. rea d ( " * n u mber" ) bibliotecas externas e a simulação de uso do operador
i o. wri te( " M e d e u m i n d i c e . . . . : " ) lógico xor.
I = i o. rea d ( " * n u mber" )
No que tange ao uso do recurso de módulos o assunto é
R = ra i z ( B, I ) mais extenso do que o apresentado. O leitor poderá
i o. wri te( " Res u l ta d o = " . . R, " \n " ) aprofundar-se nesta temática com a leitura do livro
Beginning Lua Programming publicado pela editora Wiley
-- fi m d o prog ra ma M ODU L O02 Publishing, Inc. dos autores Kurt Jung e Aaron Brown.
AUTOR
27
A PROGRAMAR
I n tro d u ç ã o a o C l o u d C o m p u ti n g e à Pl a ta fo rm a
Wi n d o ws Azu re
Nos últimos tempos muito se tem falado sobre o Cloud
Computing/Cloud, mas a verdade é que muita gente ainda
se questiona sobre: O que é? Para que serve? E a mais
importante de todas as questões; O que é que isto me
ajuda? Tendo estas questões em mente, e também após o
desafio lançado pelos responsáveis da revista Portugal-a-
Programar, decidi escrever este artigo para clarificar estas
e outras questões.
28
A PROGRAMAR
I n tro d u ç a o a o C l o u d C o m p u ti n g e à Pl a ta fo rm a Wi n d o ws Azu re
relativamente ao porquê da palavra Cloud. Este termo Se respondeu sim a todas as questões anteriores, então
deve-se ao facto de a Internet ter sido representada ao está certamente perante uma verdadeira oferta de Cloud
longo dos anos com uma nuvem, e por isso mesmo o termo Computing.
Cloud/Nuvem, ser utilizado, pois estamos a falar de um tipo
de computação acessível via Internet. Modelos de Utilização
Características Em conjunto com o Cloud Computing surgiram outras siglas
que têm sido muito badaladas como o SaaS (Software
Uma questão importante a ter em conta é o facto de ser como um Serviço), PaaS (Plataforma como um Serviço) e
necessário compreendermos exactamente o que é e o que IaaS (Infra-estrutura como um Serviço). Mas o que são na
não é Cloud Computing, pois ao longo dos anos já realidade? Olhando de uma perspectiva de alto nível, elas
assistimos por diversas vezes a situações em que utilizam definem a responsabilidade que o cliente sobre o serviço:
nomes novos para reciclar ofertas antigas. Por isso mesmo
existem algumas características principais para que
possamos identificar as ofertas mais rapidamente, sendo
elas:
verdadeira oferta de Cloud Sistema Operativo, Serviços de Suporte, etc., mas não se
preocupando com qualquer questão de gestão física dessa
Computing. mesma infra-estrutura, pois a mesma será responsabilidade
do fornecedor desse mesmo serviço. (Ex. Amazon EC2,
vCloud Express, Hyper-V Cloud, i)
29
A PROGRAMAR
I n tro d u ç a o a o C l o u d C o m p u ti n g e à Pl a ta fo rm a Wi n d o ws Azu re
soluções disponibilizadas na plataforma, bem como tratar mesmo, uma vez que permite ao fornecedor de serviços,
dos dados associados à mesma. descrever a sua oferta e o valor a ser cobrado pela mesma.
• Windows Azure AppFabric – Tem como objectivo
fornecer serviços aplicacionais para consumo nas diversas Olhando então numa perspectiva funcional e de alto nível,
aplicações, sejam eles ao nível da Identidade e Controlo de esta plataforma fornece-nos os seguintes serviços:
Acessos, até a serviços de conectividade e caching.
Disponibiliza acima de tudo um conjunto de serviços que • Ao nível com Computacional , o Windows Azure
permitem tornar as nossas soluções mais ricas, de uma Compute, que é nada mais do que um dos principais blocos
forma simplificada. desta oferta, pois para além de definir o que deverá “correr”
• SQL Azure – Serviços de dados relacionais como por em termos de computação, permite descrever também a
exemplo uma base de dados relacional (SQLAzure), um forma como a mesma deverá ser efectuada, seja ao nível
sistema de relatórios (SQL Azure Reporting Services) e da capacidade de processamento, até ao nível da memória
também um sistema de sincronização de dados (SQL alocada a esse processo de computação. É também aqui
Azure DataSync), permitindo que possamos criar soluções que acontece o processo que permite fornecer a
que tirem partido quer de uma base de dados relacional elasticidade à solução, pois através do conceito de
altamente distribuída e disponível, entre outros serviços instância (ambiente de computação funcional de acordo
muito importantes quando trabalhamos com dados. com as regras definidas na configuração do Serviço)
• MarketPlace – Plataforma para a monetização de permite definir para cada um dos serviços disponibilizados
aplicações e dados. Este é um dos pontos muito na plataforma, quantas instâncias deverão estar funcionais
interessantes da plataforma, pois não se limita apenas a ao mesmo tempo, detendo ainda a capacidade de analisar
fornecer um conjunto de serviços para “criar” e “correr” a “saúde” das mesmas por forma a evitar problemas e, ao
aplicações, mas também uma forma de monetizar os mesmo tempo, resolver rápida e automaticamente todos os
31
A PROGRAMAR
I n tro d u ç a o a o C l o u d C o m p u ti n g e à Pl a ta fo rm a Wi n d o ws Azu re
32
A PROGRAMAR
I n tro d u ç a o a o C l o u d C o m p u ti n g e à Pl a ta fo rm a Wi n d o ws Azu re
Computação que nos garantem 99,95% de disponibilidade falar de algo que é importante apenas para alguns, mas sim
ao nível de soluções Web, e 99,9% para todos os restantes para todos, quer seja através da utilização de uma simples
serviços de computação, sendo para isso necessário que aplicação como o CRM na Cloud, ou até ao
existam pelo menos duas instâncias activas desse mesmo desenvolvimento de novas soluções de negócio e até
serviço. Quanto ao SQL Azure o SLA garante 99,9% de formas nichos de mercado, o Cloud Computing irá ajudar-
disponibilidade da mesma forma como acontece com o nos a atingirmos os nossos objectivos, de uma forma mais
Windows Azure AppFabric e Windows Azure CDN. Estes ágil, económica e adequada às necessidades. E lembrem-
SLAs têm também um aspecto muito importante que se se que como diz o ditado popular “nem tudo o que luz é
prende com o facto de fornecerem uma compensação ouro”, por isso sempre que lhes apresentem uma solução
monetária ao cliente em caso de incumprimento. denominada de Cloud Computing, sejam capazes de vocês
próprios a avaliar, e compreender se é ou não na verdade.
Conclusão
Também importante é compreender que o Cloud
Tendo em consideração tudo o que falamos, poderemos Computing não é a solução para todos os problemas, mas
considerar o Cloud Computing como a próxima geração de sim mais uma opção para tirarmos o máximo partido dos
computação, e mais importante é que não é algo que investimentos que fazemos.
apenas poderemos começar a tirar partido num futuro
próximo, mas sim JÁ, pois é algo que já está disponível e Podemos também olhar para a oferta Windows Azure da
pronto para utilizarmos de forma a melhorarmos os nossos Microsoft e considerar a mesma como uma aposta séria e
investimentos. de elevada qualidade, pois não só nos permite colocar os
recursos que deverão ser processados, como também nos
AUTOR
33
A PROGRAMAR
M a n a ge d E xte n s i b i l i ty Fra m e wo rk ( M E F)
Neste artigo vou expor a framework oficial de no âmbito dessa organização não teria de se preocupar em
extensibilidade de aplicações para a plataforma .NET, que desenvolver um sistema de logging, apenas importaria o já
existe desde a versão 3.5 mas que foi oficialmente lançada existente através de MEF.Import - É um serviço que uma
com a plataforma .NET a partir da versão 4.Esta framework Part consome. Uma Part pode importar um ou vários
vem preencher uma lacuna na plataforma para a serviços tanto quanto necessário. Composition - É o acto
construção de software extensível, sem as típicas dores de de satisfazer as importações e exportações definidas na
cabeça que esta problema tem trazido até agora.Embora já aplicação, connect the dots.Contracts - Definem e
existessem outras abordagens ao problema como Unity, identificam o que está a ser exportado e o que é para ser
IoC Containers, Castle Project, a Microsoft percebeu que importado.A MEF disponibiliza out-of-the-box um modelo de
nenhuma delas era leve e fácil o suficiente para o efeito, e desenvolvimento por atributos em que o modo como se
como tal, decidiram lançar e incorporar na plataforma a sua define o que é importado, o que é exportado e os
própria framework.A MEF é o culminar de aprendizagem metadados destas importações e exportações, é através
com todos estes sistemas, ao perceber onde erravam e ao destes.
preencher os espaços que estavam por preencher para que
todos possamos desenvolver sistemas extensível com o Este é o método de utilização que vamos falar neste artigo,
mínimo esforço possível. mas o core da MEF é completamente agnóstico, poderia-se
usar qualquer outro modelo.Para entrarmos realmente na
utilização de MEF e num cenário real, vamos supor que
temos uma aplicação e que esta necessita de um sistema
de cache. Este sistema tem de ser externo porque temos
de conseguir trocar de sistema de cache de um modo
transparente, ou seja, a cache é um ponto de
extensibilidade da nossa aplicação.Em primeiro lugar (não
sendo obrigatório para a utilização de MEF, mas como boa
prática em modelos desacoplados) vamos definir um
interface que é o contrato da nossa extensão:
pu bl i c i n terfa c e I Pers i s t
{
voi d S a veToCa c h e( s tri n g key, s tri n g
pa yl oa d , L i s t< s tri n g > d epen d en tKeys ) ;
Composable Part - É algo que tem tanto consome serviços
de outras Parts como fornece também serviços. As Parts s tri n g GetF romCa c h e( s tri n g key) ;
podem tanto vir de dentro da mesma aplicação como de um }
componente externo.Export - É um serviço que uma Part
fornece. Quem importar esta Part vai obter a/as
funcionalidades inerentes. Uma Part pode exportar mais do
que um serviço se assim for necessário. Exemplo: Uma A partir deste interface, podemos criar um projecto
Part poderia por exemplo exportar um sistema de logging separado da nossa aplicação e apenas referenciar uma
transversal a uma organização, e qualquer aplicação feita assembly (tipicamente temos um projecto com todos os
34
A PROGRAMAR
M a n a ge d E xte n s i b i l i ty Fra m e wo rk ( M E F)
contratos, que tanto é referenciado pela aplicação como por utilizar estes sistemas de um modo simples, e o mais
quem cria componentes importados pela aplicação, é o importante, totalmente desacoplado:
contrato conhecido por ambas as partes que define os
termos das extensões).Ao fazê-lo, implementamos essa
pu bl i c pa rti a l c l a s s App : Appl i c a ti on
assembly da forma que esse sistema de cache funcionar:
{
pri va te I Pers i s t c a c h eS ys tem { g et;
pu bl i c c l a s s M emoryCa c h e : I Pers i s t s et; }
{
pu bl i c App( )
pu bl i c voi d S a veToCa c h e( s tri n g key, {
s tri n g pa yl oa d , L i s t< s tri n g > d epen d en tKeys ) / / fa l ta a q u i a l g o, c omo c a rreg a mos o
{ s i s tema d e c a c h e d es ej a d o ?
/ / l óg i c a
} c a c h eS ys tem. S a veToCa c h e( " key" ,
pu bl i c s tri n g GetF romCa c h e( s tri n g key) " pa yl oa d " , n ew L i s t< s tri n g > ( ) ) ;
{
/ / l óg i c a c a c h eS ys tem. GetF romCa c h e( " key" ) ;
} }
} }
pu bl i c c l a s s Di s kCa c h e : I Pers i s t
O que temos de alterar para que o MEF se encarregue de
{
carregar a assembly que contém o sistema de cache que
queremos utilizar? (qualquer um que implemente a
pu bl i c voi d S a veToCa c h e( s tri n g key,
interface IPersist).Vamos assumir que a assembly que tem
s tri n g pa yl oa d , L i s t< s tri n g > d epen d en tKeys )
a nossa lógica de cache se encontra na directoria da nossa
{
aplicação (poderia estar noutra qualquer directoria, ou até
/ / l óg i c a
poderíamos definir a classe dentro da nossa própria
}
aplicação, não existe qualquer obrigatoriedade de ser uma
pu bl i c s tri n g GetF romCa c h e( s tri n g key)
assembly externa).Em primeiro lugar temos de especificar
{
que as classes que contêm a lógica de cache se vão
/ / l óg i c a
“exportar”, e isto é apenas feito decorando as classes com o
}
atributo:[Export(typeof(IPersist))]
}
35
A PROGRAMAR
M a n a ge d E xte n s i b i l i ty Fra m e wo rk ( M E F)
AUTOR
36
A PROGRAMAR
M i c ro s o ft B i zTa l k Se rve r a o s o l h o s d o s
p ro gra m a d o re s
Já muito se tem falado sobre a plataforma BizTalk Server, o prestação de serviços do governo
que é, e as vantagens que oferece as organizações. Para • 9 das 1 0 maiores companhias de telecomunicações norte
os mais distraídos, BizTalk Server é a plataforma de americanas utilizam BizTalk
excelência da Microsoft para a integração de sistemas e • 6 das 8 maiores companhias farmacêuticas norte
processos empresariais. americanas utilizam BizTalk
• 9 das 1 0 maiores companhias espaciais e de defesa nos
Mas quais os beneficios que esta plataforma oferece aos EUA utilizam BizTalk
programadores?
Com uma robusta infra-estrutura de mensagens,
funcionalidade de resiliência (Dehydration e Rehydration),
Mercado de trabalho mais de 25 adaptadores multiplataforma, motor de regras,
possibilidade de obter informações de desempenho sobre
Onde o produto é utilizado? Em que contextos? Quais as processos críticos de negócios, debug, persistência,
oportunidades de trabalho que oferece? Remunerações? tratamento e recuperação de erros, suporte a transacções.
Estas são algumas perguntas que um programador quer
saber antes de se dedicar a uma tecnologia/produto. Torna o BizTalk Server numa ferramenta e infra-estrutura
única, ideal para ser usado principalmente para integração
Microsoft BizTalk Server 201 0 é a sétima versão do de aplicações corporativas (EAI), integração de sistemas
produto, tornando-o num dos produtos mais maduros e entre parceiros de negócio (B2B) e para gestão de
estáveis da Microsoft. processos de negócio (BPM).
37
A PROGRAMAR
M i c ro s o ft B i zTa l k Se rve r a o s o l h o s d o s p ro gra m a d o re s
BAM, BRE) e desenhar os projectos fazendo as melhores com mais atenção alguns requisitos, é fácil identificar certos
escolhas para cada situação. desafios que se podem tornar bastante complexos:
implementação de persistência, correlação de mensagens
BizTalk Developer: implementa e estende as assíncronas, recuperação em caso de falhas nas
funcionalidades base, tirando partido das diferentes comunicações, mapeamentos complexos, atomicidade,
ferramentas. Aqui existem muitas áreas completamente transacções de longa duração, monitorização e visibilidade
ortogonais e um programador poderá não dominar ao dos processos, e tudo isto se reflecte, para um
mesmo nível todas elas: Orchestration, Adapters, Pipelines, programador, em custos enormes na implementação.
Mappings, Functoids, Routing, Rules, Tracking, OLAP,
entre outras. É aqui que o BizTalk entra e o que ele faz de melhor,
porque todas estas funcionalidades estão ao dispor dos
BizTalk Administrator: um administrador de sistemas terá programadores “out of the box” com o produto, libertando
outras preocupações, como sejam a saúde dos servidores assim, os mesmos, da necessidade de terem de
e a sua actividade (HAT), desbloqueando mensagens e reimplementar vezes sem conta estas funcionalidades e
processos, garantindo o devido fluxo das mensagens, bem permitindo assim um foco no aspecto mais critico que é a
como o fluxo de dados de telemetria necessários ao bom implementação da lógica de negócio associado aos fluxos
diagnóstico dos processos de negócio. de integração.
Apesar do nosso mercado interno ser muito diferente do São diversas as funcionalidades ou módulos que
internacional aqui estão alguns exemplos reais de poderíamos enumerar. Umas ajudam a simplificar a
oportunidades de trabalho (fonte LinkedIn): interoperabilidade, outras a reduzir custos na
• “BizTalk Developers needed in”: Miami, NYC, implementação:
Jacksonville, Austin, Sacramento, Louisville, Hawaii,
Panama City, Montevideo, London, Toronto, Preston, Porto. BizTalk Orchestration Designer
• “BizTalk Administrator needed in Ft. Lauderdale FL 75K - Antes de aprender a programar é ensinado a todos os
1 00K depending on experience.” programadores como representar todos os passos
• “BizTalk Developer/Architect needed for International Law necessários para a execução de um processo na forma de
Firm in NY. 1 1 0k-1 30k.” um fluxograma, isto porque é mais legível e ilustra de forma
• “6 Month BizTalk 2009 Consultant required for Public simplificada o progresso da execução.
Sector project in London. Rates negotiable but c£500-£550
per day.” O BizTalk inclui um Orchestration Designer, integrado no
• “2 BizTalk Developer Needed in NYC - Healthcare, mid- Visual Studio, que possibilita aos programadores
level $95-1 1 0K and senior level $1 05-1 20K.” representarem os processo de negócio de forma visual,
assim como uma representação das portas, configurações
e das ligações entre as diversas actividades (shapes),
Funcionalidades para os programadores tornando-se assim mais fácil de gerir e ler do que numa
linguagem textual generalista (exemplo C#).
Não há nada que o BizTalk faça que com código escrito de
raiz não se consiga fazer, a questão é quanto tempo
demora a implementar uma solução sem um uso de
middleware (sistema de integração). Facilmente se
conseguirá efectuar uma integração entre dois sistemas
com o uso de tecnologias de comunicação e transporte de
dados tais como o Microsoft WCF, mas quando se analisa
38
A PROGRAMAR
M i c ro s o ft B i zTa l k Se rve r a o s o l h o s d o s p ro gra m a d o re s
39
A PROGRAMAR
M i c ro s o ft B i zTa l k Se rve r a o s o l h o s d o s p ro gra m a d o re s
40
A PROGRAMAR
M i c ro s o ft B i zTa l k Se rve r a o s o l h o s d o s p ro gra m a d o re s
41
A PROGRAMAR
M i c ro s o ft B i zTa l k Se rve r a o s o l h o s d o s p ro gra m a d o re s
42
A PROGRAMAR
M i c ro s o ft B i zTa l k Se rve r a o s o l h o s d o s p ro gra m a d o re s
A ferramenta “BizTalk Flat File Schema Wizard” permite ao A definição das regras de “parsing” fica embebida no
programador facilmente e de forma visual efectuar schema XSD, simplificando logo toda a reutilização destes
transformação de arquivos de texto posicionais: esquemas nos diferentes pontos do processo. Em qualquer
CABEÇALHOXXXXXXXXXXXXXXXXXXXX ponto o documento poderá ser novamente traduzido para
CORPOXXXXXXXXXXXXXXXXXXXXXXXX flat-file pois a definição é declarativa e simétrica.
CORPOXXXXXXXXXXXXXXXXXXXXXXXX
RODAPÉXXXXXXXXXXXXXXXXXXXXXXX Testes, debug e suporte ao Team Foundation
Server
As ferramentas de desenvolvimento do BizTalk usam
pastas, ficheiros e projectos do Visual Studio. Assim as
equipas podem tirar partido de todo o ambiente ALM
(Application Lifecycle Management) colaborando
naturalmente com os demais programadores, gestores de
projecto e testers que fazem parte da equipa.
AUTOR
43
A PROGRAMAR
O E d i to r d e te xto VI M
Introdução
O editor de texto Vim, é uma aplicação open source
disponível para os vários sistemas operativos Unix-based,
existindo também alguns “ports” para Windows, como o
caso do cygwin, bem como diversas versões gráficas. Para
quem não conhece, o Cygwin é uma espécie de “ambiente
unix” e linha de comandos para o sistema operativo da
Microsoft, no entanto não é possível através deste
“ambiente”, correr aplicações criadas nativamente para
Linux, existindo uma necessidade de as recompilar.
Poderá também utilizar o Software Center desta Se quisermos abrir um ficheiro já existente escrevemos o
distribuição. seguinte comando no terminal:
Se utiliza Windows e não desejar instalar o Linux nem que $ vi m < d i rec tori a e n ome d o fi c h ei ro>
seja recorrendo a uma máquina virtual, poderá recorrer ao
cygwin ou a uma versão gráfica deste editor como a que se
encontra no site http://www.vim.org. Se quisermos especificar um nome para um novo ficheiro
44
A PROGRAMAR
O E d i to r d e te xto VI M
$ vi m O Modo Insert
Quando nos encontramos no modo insert, irá aparecer
Iremos então ver o ecrã inicial do vim: essa indicação no rodapé do terminal, tal como podemos
ver na imagem seguinte:
teclado. Na tabela abaixo, podemos ver uma listagem das Se tentar gravar um ficheiro com o mesmo nome de um já
teclas utilizadas para os movimentos singulares: existente, poderá usar o comando :w! para fazer overwrite,
ou seja substituir o ficheiro mais antigo pelo novo
Edições Simples
Gravar o documento
46
A PROGRAMAR
O E d i to r d e te xto VI M
Para copiar texto no vim, usa-se a tecla “y” seguida de uma Para mim, este é um excelente editor, o facto de não dar
tecla de movimento, ou da tecla “y” para copiar a linha em uso ao rato, faz com que tenha como público-alvo os mais
que o cursor se encontra. Para colar, usa-se a tecla “p”. puristas do teclado, no entanto, e apesar deste argumento,
Para obter mais informações, acerca de alguns exemplos isso não significa que as pessoas que “gostam” do rato,
de teclas de movimento que poderá usar, consulte as não o possam usar, pois este editor é bastante simples de
tabelas referentes aos movimentos. utilizar, e a grande quantidade de comandos disponíveis,
tornam mais rápidas certas operações.
Repetir ou anular o comando anterior
Se precisar de ajuda, o vim possui uma série de
Se desejar fazer várias vezes o mesmo comando, coloque documentos, bastando para aceder aos mesmos, entrar no
o cursor no local onde o deseja correr e prima a tecla ponto Command Mode, e digitar o comando :help.
(.). Irá aplicar novamente o comando anterior.
Caso tenha cometido um erro de edição, recorra à tecla “u”, Um bom sítio para começar é a cheat-sheet disponível em
para anular a última acção. http://www.tuxfiles.org/linuxhelp/vimcheat.html, onde poderá
consultar outros comandos úteis.
Deslocamentos no ecrã
AUTOR
47
COLUNAS
CORE DUMP - Fazer mal = Rápido?
VISUAL (NOT) BASIC - Introdução ao OpenXML SDK
CORE DUMP
Fa ze r m a l = R á p i d o ?
Em conversa recente com um programador sobre uma Silêncio pensativo...
determinada opção que não me parecia a melhor, este Resposta inconclusiva...
respondeu-me que “teve de ser assim porque não havia
tempo”. A verdade é que a larga maioria das pessoas aceita esta
expressão como um dogma. “Para fazer mais rápido tenho
Esta justificação, ou fatalidade, é comum no meio da de fazer mal” parece uma fatalidade, qual fado de quem
programação, sendo impossível a um profissional desta ganha a vida a programar. No entanto, quando
área não se ter cruzado com ela. Todos nós, mesmo os confrontadas com o facto de que demorariam mais tempo
que não são profissionais desta área, já olharam para o seu se fizessem bem, nenhuma, até ao dia de hoje, me
trabalho e o criticaram. Isso é excelente dado que indica respondeu que sim, que necessitaria de mais tempo para
que sabemos fazer melhor. Então porque não o fazemos? fazer as coisas de forma correcta.
Só porque havia pouco tempo?
A minha teoria, obviamente não provada cientificamente, é
Ouvi tantas vezes esta explicação, ou desculpa, que tal me de que com a pressão, a maioria das pessoas entra em
levou a parar e pensar um pouco sobre a mesma. stress e baixa os seus próprios padrões de qualidade,
aceitando como médio um trabalho que rejeitariam em
Sem dúvida que os prazos têm poderes mágicos sobre os condições normais. Em casos mais críticos, esta baixa de
projectos. Quando um dead-line se aproxima começa a padrões é acompanhada por trashing mental, onde as
magia: os testes passam para segundo plano, a pessoas deixam de conseguir raciocionar de forma clara,
documentação resume-se a pouco mais do que código afectando assim o resultado final do seu trabalho.
fonte e o código fonte começa a ser escrito de forma
menos ortodoxa... E é precisamente neste último ponto Sejam quais forem as razões na verdade “fazer mal” não
que reside a origem da justificação de código mal feito: a tal implica que se faça “mais rápido”. Obviamente haverá
falta de tempo... excepções, mas mesmo sobre a pressão de um dead line
devemos ser capazes de manter a cabeça fria e ser fieis
Seguindo um raciocínio lógico, corroborado ao longo de aos nossos próprios padrões de forma a não comprometer
anos a fio pela expressão “falta de tempo => mau código”, o resultado final do nosso trabalho. Numa área onde a
qualquer um poderá acreditar que tal é verdade. Para pressão de dead lines agressivos é demasiado recorrente,
provar se esta expressão é verdadeira ou falsa comecei a não ceder e saber manter os seus padrões é um factor
perguntar a todos quantos quantos usam este dogma, a valiosos que diferencia os bons profissionais.
seguinte questão: “ Dizes que fizeste mal porque era
mais rápido. Isso quer dizer que se fizesses bem No entanto, e infelizmente, continuo a ouvir esta expressão
demorarias mais tempo?” demasiadas vezes...
AUTOR
50
VISUAL (NOT) BASIC
I n tro d u ç ã o a o O p e n XM L S D K
Resumidamente, o OpenXML é um padrão aberto (ISO) de Uma grande vantagem desta estrutura é a possibilidade de
arquivos para documentos, folhas de cálculo e aceder a uma determinada parte do arquivo sem que seja
apresentações, que é baseado em XML e que pode ser necessária a sua leitura total, o que leva a ganhos de
implementado por diversas aplicações em diversas tempo no que toca a arquivos de grande dimensão.
plataformas.
51
VISUAL (NOT) BASIC
I n tro d u ç ã o a o O p e n XM L SD K
Arquitectura
Stream Reading/Writing : O seu funcionamento é
O Open XML SDK é implementado camadas, a partir de semelhante ao funcionamento das classes XmlReader e
uma camada de base que vai subindo a uma de maior nível XmlWriter, mas são mais fáceis de usar
de funcionalidade. O diagrama abaixo mostra o esquema
do Open XML SDK.
System Support
System.IO.Packaging : Adiciona, edita e remove os Hight Level Functions : É um auxiliar com exemplos de
ficheiros XML contidos no pacote código para executar operações comuns. Estas funções
têm como função modificar o XML
Open XML Schemas : Estes esquemas são a base do
Open XML SDK que actualmente é baseado no padrão
ECMA-376
52
VISUAL (NOT) BASIC
I n tro d u ç ã o a o O p e n XM L S D K
A principal vantagem
de usar o Open XML SDK
é que é totalmente
suportado no servidor ...
não necessita de ter o
Microsoft Office instalado
Exemplos de utilização
Limitações
Exemplo 1
Não é um substituto para o Microsoft Office e além disso, é
necessário compreender a estrutura dos formatos para usar Este exemplo mostra como efectuar uma simples
o Open XML SDK. exportação do conteúdo de uma DataGridView para uma
folha de Excel, usando um Template
Não é possível converter formatos Open XML para outros
formatos, como HTML ou XPS. Não garante a validade do
documento quando se opta por manipular directamente o
XML. Não possui um layout ou funcionalidades de recalculo
Utilização
O SDK pode ser obtido através desta hiperligação:
http://bit.ly/jkaykK
Depois de instalado, terá de ser referenciado. Para isso Agora guardamos o nosso template com o nome
53
VISUAL (NOT) BASIC
I n tro d u ç ã o a o O p e n XM L SD K
“template.xlsx”
M y. Res ou rc es . Templ a te, F a l s e)
' Ac ed e a os d a d os n el a c on ti d os
Di m Da d os As S h eetDa ta =
WS h eet. Works h eet. GetF i rs tCh i l d ( Of
Depois de termos o template criado, vamos adicionar aos
S h eetDa ta ) ( )
resources da aplicação
' Al g u ma s va ri a vei s q u e va mos prec i s a r
' n o c i c l o q u e s e s eg u e
Di m R As Row = N oth i n g
Di m C As Cel l = N oth i n g
' Ad i c i on a o va l or à c ol u n a
M y. Compu ter. F i l eS ys tem. S pec i a l Di rec tori es . Tem C. Cel l Va l u e =
p & " \L i s ta Cl i en tes . xl s x" N ew Cel l Va l u e( L i n h a . Cel l s
( Col u n a . I n d ex) . Va l u e. ToS tri n g ( ) )
M y. Compu ter. F i l eS ys tem. Wri teAl l Bytes ( ,
54
VISUAL (NOT) BASIC
I n tro d u ç ã o a o O p e n XM L S D K
' Ad i c i on a a c ol u n a à l i n h a
I mports Doc u men tF orma t. Open Xml
R. Appen d Ch i l d ( C)
I mports Doc u men tF orma t. Open Xml . Pa c ka g i n g
I mports Doc u men tF orma t. Open Xml . Word proc es s i n g
N ext
E este é o resultado:
' Cri a u ma n ova es tru tu ra
Pa rte. Doc u men t = N ew Doc u men t
' Ad i c i on a u m pa ra g ra fo
Di m Pa ra g ra fo As Pa ra g ra ph =
Como podemos ver, esta operação foi efectuada em pouco
Corpo. Appen d Ch i l d ( N ew Pa ra g ra ph ( ) )
tempo, com simplicidade e rapidez.
' F ec h a o d oc u men to
Doc . Cl os e( )
End Usi ng
55
VISUAL (NOT) BASIC
I n tro d u ç ã o a o O p e n XM L SD K
E este é o resultado:
' F ec h a o d oc u men to
Doc . Cl os e( )
End Usi ng
Exemplo 3
' Abre o d oc u men to a n teri ormen te c ri a d o Office 201 0 Sample: Open XML SDK 2.0 Code Snippets for
U s i n g Doc As Word proc es s i n g Doc u men t = Visual Studio 201 0
Word proc es s i n g Doc u men t. Open ( fi c h ei ro, F a l s e) http://bit.ly/azN4Pw
AUTOR
56
COMUNIDADES
NetPonto - Certificações Microsoft
COMUNIDADE NETPONTO
C e rti fi c a ç õ e s M i c ro s o ft
58
COMUNIDADE NETPONTO
C e rti fi c a ç õ e s M i c ro s o ft
59
COMUNIDADE NETPONTO
C e rti fi c a ç õ e s M i c ro s o ft
possível até ao dia 30 de Junho de 201 1 , realizar uma • Webcasts do MSDN e Comunidades
certificação sem qualquer custo. Para mais informações • Sessões dos Eventos da Microsoft - PDC, Mix, TechEd
consulte o seguinte link: http://bit.ly/l5N43t
À primeira vista poderá achar que existem muitos recursos,
no entanto não é necessário que tenha que ter todos em
conta. Associado ao ritmo de estudo, tipo de estudo,
Nota: Um exame quando é marcado tem um prazo para disponibilidade e maturidade, assim será definido o tempo
poder ser alterado ou cancelado, no entanto é preciso de preparação para um exame. É preciso ter atenção
apresentar uma justificação válida. quando se marca o exame, deve-se ter em conta um
período de tempo suficiente para ficar bem preparado e ao
A estrutura dos exames varia de tecnologia para tecnologia mesmo tempo não ficar com intervalo muito grande para
ou de produto para produto, tanto em termos de tempo não dispersar por outras coisas.
disponível para realizar a prova ou o tipo e número de
questões. Para saber mais sobre o formato dos exames Irei de seguida apresentar os títulos que se podem obter e
visita as seguintes referências: os respectivos exames, de acordo com a tecnologia ou
• Exam Formats: http://bit.ly/fsA9f5 produto em causa.
• Microsoft Certification Exam Demo - http://bit.ly/fWoFyW
Microsoft Visual Studio and Microsoft
Para além da experiência ser um factor fundamental para a .NET Framework technologies
realização do exame, nem sempre isso é um é um dado
adquirido. Com experiência ou não é sempre bom realizar Percurso para obtenção do título - Microsoft Certified
um estudo estruturado e para ajudar nesse estudo pode-se Techonology Specialist (MCTS)
ter em conta:
• Os objectivos de cada exame, pois estes apresentam • .NET Framework 3.5 - Visual Studio 2008
todo o conteúdo abordado no exame.
• Cursos presenciais nos centros Microsoft
• Cursos Oficiais da Microsoft On-line:
http://bit.ly/mRTUvj - através do portal Microsoft e-Learning,
pode fazer diversos cursos on-line com preços bastante
reduzidos, comparado com os cursos presenciais.
• Cursos do Programa RampUp: http://bit.ly/lk49d8 - O
RampUp é uma iniciativa da Microsoft onde pode fazer
alguns cursos on-line totalmente gratuitos. É ideal para
quem é iniciante em um produto ou tecnologia!
• Training Kits da Microsoft Press - Podem ser comprados
na Microsoft Press UK, Amazon, etc. )
• Exames Simulados - Existem várias empresas que
fornecem exames simulados, para que possa praticar antes
de fazer o exame real, como por exemplo a MeasureUp ou
Self-Test Software
• Prepare o seu Próprio Plano de Estudos - No site da
Microsoft Learning pode encontrar os “Learning Guides”
para cada exame de certificação, contendo todos os tópicos • .NET Framework 4.0 – Visual Studio 201 0
que são abordados no exame em questão.
60
COMUNIDADE NETPONTO
C e rti fi c a ç õ e s M i c ro s o ft
61
COMUNIDADE NETPONTO
C e rti fi c a ç õ e s M i c ro s o ft
Microsoft Office System Technologies O guia de preparação para Microsoft Office System
Technologies está disponível em http://bit.ly/jeiqiz
Percurso para obtenção do título - Microsoft Certified
Techonology Specialist (MCTS)
Microsoft Exchange Server Technology
• SharePoint 2007
Percurso para obtenção do título - Microsoft Certified
Techonology Specialist (MCTS)
Percurso para obtenção do título - Microsoft Percurso para obtenção do título - Microsoft Certified IT
Certified IT Professional (MCITP) Professional (MCITP)
• SharePoint 201 0
O guia de preparação para
Microsoft Virtualization
Technology está disponível em
http://bit.ly/m1 8WvA
62
COMUNIDADE NETPONTO
C e rti fi c a ç õ e s M i c ro s o ft
Windows 7
Percurso para obtenção do título - Microsoft Certified
Techonology Specialist (MCTS)
AUTOR
63
NOTICIAS
Fe l i z An i ve rs á ri o P@ P
A comunidade Portugal-a-Programar fez 6 anos de WIKI
existência no dia 28 de Maio de 201 1 . São vários anos de
trabalho e dedicação, de diversos colaboradores
voluntários, para que tenha sido possível criar e fazer
crescer uma comunidade de programadores na língua
Portuguesa.
FÓRUM
64