Escolar Documentos
Profissional Documentos
Cultura Documentos
EQUIPA PROGRAMAR
Coordenadores
Antnio Silva
Fernando Martins
Editor
Antnio Santos
Design
Srgio Alves
Twitter: @scorpion_blood
Redaco
Bruno Pires
Augusto Manzano
Sandro Pereira
Fernando Martins
Nuno Godinho
Paulo Morgado
Srgio Ribeiro
Vtor Tomaz
Flvio Geraldes
Staff
Antnio Santos
Fbio Canada
Fbio Domingos
Jorge Paulino
Pedro Martins
Sara Santos
Contacto
revistaprogramar@portugal-aprogramar.org
Website
http://www.revista-programar.info
ISSN
1 647-071 0
RIP
No inicio de Outubro faleceu Steve Jobs, mais precisamente um dia antes do
lanamento da edio anterior da Revista PROGRAMAR. Sete dias depois faleceu
Dennis Ritchie. Doze dias depois faleceu John McCarthy. Independentemente de se
gostar ou no, a verdade que aquilo que fizeram influenciou a vida de muitas
pessoas. Dennis Ritchie foi um dos pais do C, linguagem que influenciou a vida de
todos os programadores, quer directa quer indirectamente, quer usem ou no C para
programar. John McCarthy foi o pai do Lisp, que apesar de no estar to
disseminado na programao, tm uma grande relevncia, principalmente na rea
da Inteligncia Artificial. Steve Jobs levou a Apple rumo ao sucesso, depois da
empresa sem si ter afundado, quase a ponto de se extinguir. E verdade que cada
um fez muito mais, estes so, no entanto, e na minha opinio as marcas mais
importantes de cada um deles.
Assim, no tenho qualquer receio de afirmar que todos eles merecem a nossa
considerao pelo que fizeram e alcanaram, quer se concorde ou no com algumas
ideias e filosofias. Mas a verdade que o mais destacado foi sem dvida Steve
Jobs. Mereceu notcias de abertura em canais de televiso, notcias de primeira
pgina em jornais e revistas, entre outras, enquanto Dennis Ritchie e John McCarthy
ficaram quanto muito com algumas linhas em jornais e revistas, e um pouco mais em
revistas e comunidades ligadas programao e tecnologia. Muitos insurgiram-se
pelo facto de no haver o mesmo destaque entre todos. Mas a verdade que ambos
viviam muito mais sombra da sociedade em geral que Steve Jobs. Contudo no
foram esquecidos. O Fedora 16, lanado cerca de um ms depois da morte de
Dennis Ritchie foi-lhe dedicado. Durante a sua vida John McCarthy recebeu tambm
inmeros prmios, como por exemplo o prmio Turing. Tambm verdade que
muitos se apressaram quase a colocar Steve Jobs num pedestal, removendo-lhe os
defeitos. Mas ele tinha os seus, tal como Dennis e John. Mas seria melhor pessoa,
melhor informtico que os outros dois? provvel que no. Apenas era mais
visvel, e o mediatismo fez o resto. Mas a verdade que terminaram a sua existncia
terrena tal como a conhecamos. Talvez sem puderem dizer um adeus a quem
gostavam ou queriam, tal como Dennis Ritchie que faleceu sozinho em sua casa.
Da minha parte resta-me deixar um obrigado aos trs pela sua contribuio
para as tecnologias da informao, e um at sempre a todos os leitores e equipa da
Revista PROGRAMAR, pois esta ser a minha ltima edio como coordenador.
Foram mais de 3 anos de participao neste projecto, passando por redactor,
revisor, editor e agora coordenador. Bastante tempo, considerando que o projecto
tem aproximadamente 6 anos. Mas saio com a sensao de dever cumprido,
sabendo que fiz todos o que estava ao meu alcance para levar a revista mais longe,
com ajuda de toda a equipa da Revista PROGRAMAR, a quem deixo tambm um
muito obrigado. Durante o tempo que estive como editor e coordenador mudmos o
visual para algo mais apelativo, crimos parcerias com comunidades, passamos a
distinguir os artigos mais votados, entre vrias outras mudanas internas. Tudo isto
graas excelente equipa que torna possvel a existncia da Revista PROGRAMAR.
Saio tambm com a certeza de ser bem substitudo pelo Antnio Santos, aqum
deixo desde j um obrigado, e desejo que com a sua a ajuda a Revista
PROGRAMAR chegue ao infinito e mais alm.
At sempre,
Antnio Silva
<antonio.silva@revista-programar.info>
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
A PROGRAMAR
15
18
24
29
COLUNAS
31
40
COMUNIDADES
42
AzurePt - Como suportar mltiplas identidades no seu WebSite com Windows Azure AppFabric ACS
Saiba como resolver o problema das identidades em demasia atravs do Azure. Nuno Godinho.
47
EVENTOS
03
16
17
27
17
Dez 2011
a 18 Dez 2011
Dez 2011
Fev a 1 Mar 2012
Maro 2012
NOTICIAS
O que a Microsoft, Oracle, IBM e SAP
No Dizem aos Clientes
A SAP confunde os clientes com o preo. Muitos dos clientes da SAP pedem a Gartner ajuda para descobrir os preos e licenciamento da SAP, uma vez que a SAP tem termos
NOTICIAS
As 25 Piores Palavras-passe do Ano
O significado atribudo s sequncias de peas depende daquilo para que a aplicao que as fotografa tiver sido concebida uma aplicao pode interpretar trs peas vermelhas
como uma instruo para emitir um som e outra como uma
instruo para mostrar um nmero.
Muitos dos utilizadores usam sequncias numricas e alfabticas carregando em teclas contguas do teclado - como
123456 ou qwerty - ou ento a prpria palavra password.
De acordo com o director-executivo da SplashData, Morgan
Slain - citado pelo site especializado em tecnologia Mashable
- mesmo que as pessoas sejam encorajadas a escolher palavras-passe seguras e fortes, muitas continuam a escolh-las
fracas, fceis de adivinhar, colocando-se em risco de fraude e
de roubo de identidade.
No ltimo dia do Codebits, que decorreu no Pavilho Atlntico, em Lisboa, foram mostrados cerca de 80 projectos, com
cada equipa a ter 90 segundos para fazer a apresentao,
num ltimo esforo para convencer o jri (que acompanhou o
trabalho das equipas ao longo dos dois dias) e ainda com o
objectivo de conseguir os sete prmios atribudos pelo pblico, que podia votar nos projectos no final de cada apresentao.
TEMA DA CAPA
iOS, Cocoa Touch & MVC
TEMA DA CAPA
iOS, Cocoa Touch & MVC
Entre as frameworks do Cocoa Touch de maior relevo esto
as seguintes:
MVC
A grande maioria das plataformas de desenvolvimento de
software permitem aos programadores desenvolver software
com base nos mais diversos padres de arquitectura. Essa
abordagem oferece um elevado grau de liberdade, permitindo ao programador escolher a melhor soluo para o seu
problema, com os recursos que dispe.
Controller
View
Core Animation
Core Location
Core Audio
Core Data
UIKit
Model
Figura 1 - MVC
Nos ltimos anos tem-se vindo a assistir a uma evoluo e
consolidao neste campo, principalmente quando o tema
so os padres de camada de apresentao e o Cocoa
Touch no foge a essa tendncia. Apple definiu o padro de
arquitectura de software Model-View-Controller (MVC), como
padro de referncia para o desenvolvimento de aplicaes
para os dispositivos que utilizam iOS (iPod, iPhone, iPad).
O tema do MVC j foi abordado na edio n27 da revista
PROGRAMAR, pretendido que o leitor tenha em mente o
conceito, pois este tema incontornvel no decorrer do artigo.
Cocoa Touch
O leitor vai, com toda a certeza, reconhecer alguns dos componentes da figura 3 disponibilizados pela UIKit Framework.
uma camada de alto nvel do iOS, composta por um conjunto de frameworks que disponibilizam ferramentas que
permitem ao leitor utilizar todo o potencial que a plataforma
iOS tem para oferecer, ao mesmo tempo, permite desenvolver aplicaes que transmitem ao utilizador uma sensao
familiar durante a sua utilizao graas utilizao transversal nas vrias aplicaes do Sistema Operativo.
A documentao acessvel e objectiva, permite desenvolver aplicaes para iOS num curto espao de tempo, o design e a experincia de utilizao proporcionada pelos componentes de esta framework so transversais a todo o Sistema Operativo, o que garante ao leitor que o utilizador se vai
sentir familiarizado com as suas aplicaes.
aconselhado ao leitor, que antes de prosseguir, tenha em
mente o artigo Introduo ao Objective-C e plataforma iOS
publicado no n 30 da revista Programar.
Leitor de RSS
Para consolidar os conceitos apresentados anteriormente, o
melhor passar prtica e desenvolver um leitor de RSS.
Execute o XCode, ferramenta includa no iOS SDK, e crie um
novo projecto recorrendo ao template Navigation-based Application.
TEMA DA CAPA
iOS, Cocoa Touch & MVC
Este template contm uma View (RootViewController.xib) e
um Controller (RootViewController.h/.m).
A View, j contm um controlo do tipo UITableView, que
apresentado na figura 5 e o Controller contm os mtodos e
eventos necessrios para fornecer ao controlo UITableView
a informao necessria para apresentar os dados na View.
Sendo assim, torna-se necessrio criar um Model que fornea ao Controller o tipo de objectos a serem manipulados e
enviados para a View.
#import "RssFeed.h"
@implementation RssFeed
@synthesize FeedSumario;
@synthesize FeedTitulo;
@synthesize FeedUrl;
@end
O template escolhido fornece um conjunto de funcionalidades bsicas para uma aplicao que pretende ter um interface de navegao, o que o caso.
Considera-se que um leitor de RSS bsico, necessita de pelo
menos um ecr com uma lista de feeds e um outro que permita visualizar o detalhe de um feed.
TEMA DA CAPA
iOS, Cocoa Touch & MVC
De seguida, vamos proceder s alteraes necessrias ao
Controller para este obter os dados para alimentar a View.
Para isso, torna-se necessrio criar uma estrutura de dados
no RootViewContoller.h para acomodar os dados provenientes do Repository.
#import "RssFeed.h"
#import <Foundation/Foundation.h>
@interface Repository : NSObject {
NSMutableArray *FeedsList;
}
+ (NSArray*)getRssFeeds;
@end
#import "Repository.h"
#import "DetailViewController.h"
#import <UIKit/UIKit.h>
@interface RootViewController :
UITableViewController {
}
@property (nonatomic, retain) NSArray *feeds;
@end
#import "Repository.h"
@implementation Repository
+ (NSArray*)getRssFeeds{
NSMutableArray *feedList = [[NSMutableArray
alloc] init];
Agora que existe onde guardar os dados recebidos, necessrio fornece-los ao controlo UITableViewController. Para
isso, preciso alterar o mtodo viewDidLoad na implementao do Controller (RootViewContoller.m).
- (void)viewDidLoad
{
[super viewDidLoad];
feeds = (NSArray*)[[Repository getRssFeeds]
retain];
}
Figura 12 Alterao do mtodo viewDidLoad no Controller RootViewController
[feedList addObject:item1];
[item1 release];
}
else{
RssFeed *item2 = [[RssFeed alloc] init];
item2.FeedTitulo = @"HTML5 & CSS3 no Visual
Studio 2010";
item2.FeedSumario = @"Muito se tem falados nos
ltimos meses nos novos standards para Web
HTML5 e CSS3, comparaes com outras
tecnologias, milhares de blog posts, artigos
de opinio e discusses sobre o assunto.
Embora ainda no sejam um standard fechado, j
existem projectos desenvolvidos outros
projectos em desenvolvimento recorrendo a
estas tecnologias[...] ";
item2.FeedUrl = @"http://blastersystems.com/
blog/2011/06/html5-css3-no-visual-studio-20102/?utm_source=rss&utm_medium=rss&utm_campaign=
html5-css3-no-visual-studio-2010-2";
[feedList addObject:item2];
[item2 release];
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section
{
return [feeds count] -1;
}
}
}
return [feedList autorelease];
}
@end
TEMA DA CAPA
iOS, Cocoa Touch & MVC
J existem os feeds na estrutura de dados do Controller e j
informamos o UITableView do nmero de elementos que lhe
vamos fornecer, apenas resta adicionar as feeds ao UITableView.
O leitor pode aproveitar novamente a vantagem de o Controller ser uma sub-classe de UITableViewController, porque no
template j existe um mtodo definido para fornecer os dados ao UITableView, apenas necessrio alterar um pouco
o cdigo existente.
- (UITableViewCell *)tableView:(UITableView *)
tableView cellForRowAtIndexPath:(NSIndexPath *)
indexPath
{
static NSString *CellIdentifier = @"myCell";
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier] autorelease];
}
if (feeds !=nil)
{
[cell.textLabel setText:((RssFeed*) [feeds
objectAtIndex:indexPath.row]).FeedTitulo];
}
return cell;
}
Para isso vamos adicionar um novo Controller, o DetailViewController, mas desta vez o novo Controller uma
sub-classe de UIViewController.
10
TEMA DA CAPA
iOS, Cocoa Touch & MVC
Para apresentar o detalhe da feed, proposto criar um UILabel para apresentar o ttulo da feed, um UITextView para
apresentar o sumrio do feed e um UIButton para abrir a
fonte da feed no safari.
- (id)initWithFeed:(RssFeed *)feed{
self = [super init];
if (self) {
feedDetail = feed;
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
[FeedTitle setText:feedDetail.FeedTitulo];
[FeedSummary setText:feedDetail.FeedSumario];
}
- (void)viewDidUnload
{
[super viewDidUnload];
}
-(IBAction)linkButtonClick:(id)sender {
NSString* launchUrl = feedDetail.FeedUrl;;
[[UIApplication sharedApplication] openURL:
[NSURL URLWithString: launchUrl]];
}
Agora necessrio definir o Controller da View acima apresentada, e para isso basta colocar na interface do DetailViewController a definio das propriedades que compem a View bem como definir um novo construtor para o
Controller, para suportar receber um objecto do tipo RssFeed
quando instanciado.
- (void)dealloc
{
[super dealloc];
[feedDetail release];
}
@end
#import "RssFeed.h"
#import <UIKit/UIKit.h>
@interface DetailViewController : UIViewController
Para terminar apenas falta referenciar os componentes definidos no Controller com os componentes definidos na View.
No ficheiro de implementao do DetailViewController necessrio implementar o novo construtor, a gesto de memria dos objectos criados e gerir o evento TouchDown do boto FeedOnSafari.
#import "DetailViewController.h"
@implementation DetailViewController
@synthesize FeedOnSafari;
@synthesize FeedSummary;
@synthesize FeedTitle;
@synthesize feedDetail;
11
TEMA DA CAPA
iOS, Cocoa Touch & MVC
(void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
DetailViewController *details =
[[DetailViewController alloc] initWithFeed:
(RssFeed*) [feeds objectAtIndex:indexPath.row]];
[self.navigationController
pushViewController:details animated:YES];
[details release];
}
Figura 24 Mtodo a alterar para existir navegar para o detalhe da
feed selecionada
tambm necessrio alterar o mtodo cellForRowAtIndexPath e adicionar um indicador na clula de cada feed para
que o utilizador compreenda que existe um ecr de detalhe
para o qual pode navegar e alterar tambm o mtodo didSelectRowAtIndexPath para este invocar ao navigationController a navegao para um novo ecr.
- (UITableViewCell *)tableView:(UITableView *)
tableView cellForRowAtIndexPath:(NSIndexPath *)
indexPath
{
static NSString *CellIdentifier = @"myCell";
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier] autorelease];
}
cell.accessoryType =
UITableViewCellSelectionStyleBlue;
if (feeds !=nil) {
[cell.textLabel setText:((RssFeed*)
[feeds objectAtIndex:indexPath.row]).FeedTitulo];
}
return cell;
AUTOR
Escrito por Bruno Pires
Exerce funes de consultor de IT na Novabase desde 2008, com experincia de maior relevo nas reas da banca e televiso digital, onde ganhou competncias nas mais vrias tecnologias. Membro da Comunidade NetPonto (http://netponto.org) e
autor do blog http://blog.blastersystems.com - Twitter: @brunoacpires
12
A PROGRAMAR
Gerao de nmeros aleatrios (Parte 2)
Automatizao de tarefas usando atributos
SQL Azure Fedarations
Enigmas de C#: Arrays
A PROGRAMAR
GNA - GERAO DE NMEROS ALEATRIOS (Parte 2)
No artigo anterior foi indicado o mtodo de gerao de
nmeros pseudo-aleatrios meio do quadrado. Em
continuao ser mostrado neste o mtodo do produto do
meio.
INTRODUO
Iterao
0
1
2
3
4
5
6
7
8
9
Valor
Multiplicado
32534
58461
58461
01970
01970
15168
15168
29880
29880
53219
53219
90183
90183
99449
99449
68609
68609
23096
23096
84593
01901970174
00115168170
00029880960
00453219840
01590183720
04799449077
08968609167
06823096441
01584593464
01953759928
Observe que aps aplicao do mtodo so obtidos os valores 01970, 15168, 29880, 53219, 90183, 99449, 68609,
23096, 84593 e 53759.
A aplicao do mtodo pode ser realizada a partir do
algoritmo seguinte:
15
Produto do
Meio
A PROGRAMAR
GNA - GERAO DE NMEROS ALEATRIOS (Parte 2)
T = tamanho ajustado para onze dgitos, onde 11-td igual ao
nmero de zeros a ser inserido esquerda de p, se td for
menor que 11.
CONCLUSO
Neste artigo foi apresentado o mtodo de gerao de
nmeros pseudo-aleatrios meio do produto, sendo este
mais eficiente que o mtodo do meio do quadrado, pois
demora mais a apresentar valores zero.
BIBLIOGRAFIA
AUTOR
Escrito por Augusto Manzano
Natural da Cidade de So Paulo, tem experincia em ensino e desenvolvimento de programao de software desde 1 986.
professor da rede federal de ensino no Brasil, no Instituto Federal de Educao, Cincia e Tecnologia. tambm autor, possuindo na sua carreira vrias obras publicadas na rea da computao.
16
A PROGRAMAR
Automatizao de tarefas usando atributos
(IConstructionCallMessage ctorMsg)
{
ctorMsg.ContextProperties.Add(new
LogProperty());
}
}
Introduo
Na edio nmero 30 da revista Portugal a Programar falmos de atributos em C#. Vimos como podamos usar esta
funcionalidade para reconhecer um certo tipo de classes, ou
mesmo atribuir-lhes certas funcionalidades. Sendo uma funcionalidade muito interessante convenhamos que, na prtica,
muito raramente a iremos utilizar. Se quisermos caracterizar
uma determinada classe ou que esta tenha determinados
comportamentos provavelmente iremos usar uma interface
ou herana. Se quisermos guardar informao ou implementar certas funcionalidades o mais certo usarmos um delegate. Ou ento implementar na prpria classe.
/*
* O que fazer quando o contexto fica
* bloqueado. Tipicamente no relevante
*/
public void Freeze(Context newContext)
{}
// Temos de verificar se o novo contexto
// est OK
18
A PROGRAMAR
Automatizao de tarefas usando atributos
Nos comentrios est a explicao para a maior parte do
cdigo. No entanto, h um mtodo que especial. no mtodo GetObjectSink que a magia vai acontecer. At agora
temos estado a criar as classes necessrias para construir a
cadeia de objectos que vo ser chamados no contexto. Mas
aqui que efectivamente estamos a colocar o nosso cdigo.
nextSink.SyncProcessMessage(msg);
IMethodReturnMessage mrm = (rtnMsg as
IMethodReturnMessage);
return mrm;
}
}
Como podemos ver bastante simples. Tal como nos atributos normais, basta colocar o nosso atributo como atributo
desta classe. Tem, no entanto, um pequeno truque. Desde o
inicio que se tem falado de contextos. Que estes atributos
so usados quando entramos ou samos de um contexto.
Temos ento de dizer framework que queremos que este
objecto esteja associado a um contexto. Para isso basta
herdar da classe ContextBoundObject.
19
A PROGRAMAR
Automatizao de tarefas usando atributos
Antes de tentarmos ir mais adiante com o nosso logger, vamos ver se a nossa mensagem est a ser correctamente
executada na cadeia. Vamos voltar ao mtodo SyncProcessMessage do objecto LogSink e colocar o nosso debug:
20
A PROGRAMAR
Automatizao de tarefas usando atributos
Temos assim uma forma de registar todos os acessos a um
determinado objecto.
No h solues, h compromissos
No entanto, como em quase todas as decises de arquitectura deste tipo, necessrio ter em conta aquilo que se tem de
abdicar quando se quer certas regalias.
Esta funcionalidade tem um grande peso em termos de performance. S para se ter uma ideia, vamos fazer algumas
medies.
Para comear, vamos ver quanto tempo demora para imprimir 10000 vezes a mesma frase, usando o nosso logger.
Vamos alterar o mtodo Main:
}
Temos o seguinte resultado:
Console.WriteLine("\n\n\nDemorou " +
(after - before) + " a correr.");
WaitForKeyPressAndExit();
}
21
A PROGRAMAR
Automatizao de tarefas usando atributos
que uma determinada aplicao deixe de ser til, pois no
faz o seu servio no tempo definido. H sempre formas de
aumentar a capacidade de um servio, adicionar mquinas a
um cluster, aumentar a capacidade de processamento, discos/memrias mais rpidas... No entanto tudo isto custa dinheiro. Alm de que, muitas vezes, h optimizaes que tm
de ser feitas no cdigo, ao nvel dos algoritmos e das bibliotecas usadas. No entanto, nos casos em que possvel de
ser usado, temos aqui uma forma de ter cdigo bastante
limpo, que simplifica em muito certas tarefas que so necessrias de fazer de forma repetida.
Concluso
Utilizando o contexto do objecto podemos injectar um proxy
que vai ser chamado sempre que esse objecto seja utilizado.
Desta forma podemos criar um proxy que nos permite adicionar lgica de controlo antes e depois da execuo de um
mtodo. Este proxy chamado automaticamente pela framework fazendo com que deixe de ser uma preocupao
nossa. Teremos assim menos repetio de cdigo e um controlo mais fino na execuo da nossa aplicao.
AUTOR
Escrito por Flvio Geraldes
Licenciou-se em Engenharia Informtica e Computadores no Instituto Superior Tcnico tendo-se especializado na rea de
Programao e Sistemas de Informao. Aps a finalizao do curso juntou-se Sybase SBS Software onde teve
oportunidade de trabalhar com vrias tecnologias focando-se particularmente em .NET. Actualmente consultor da Sybase
SBS Software numa empresa de telecomunicaes onde responsvel pelo desenho e desenvolvimento de vrias
aplicaes.
Enigmas de C# Arrays
por Paulo Morgado
Dadas as seguintes classes:
public class Posio
{
}
public class Posio2D : Posio
{
public int X { get; set; }
public int Y { get; set; }
}
public class Posio3D : Posio2D
{
public int Z { get; set; }
}
};
try
{
new Posio3D
{
X = 2,
Y = 1,
Z = 3
},
new Posio3D
{
X = 3,
Y = 2,
Z = 1
}
Process(array);
Console.WriteLine("Dados processados!");
}
catch (Exception ex)
{
Console.WriteLine("{0}: {1}",
ex.GetType().FullName,
ex.Message);
}
A PROGRAMAR
Introduo s SQL Azure Federations
O cloud computing tem sido um assunto muito debatido, no
mundo das tecnologias de informao no s pela
capacidade de computao de alta disponibilidade,
escalabilidade e elasticidade bem como pela reduo de
custos que o modelo baseado em servios proporciona.
Scale Out
Outra limitao natural, quem em muitos cenrios se revela
mais importante ainda, a capacidade de processamento do
servidor. Quantas vezes as necessidades de escalabilidade
so provocadas pelo aumento da carga de processamento?
Imagine um website de vendas de bilhetes onde devido ao
lanamento de um evento o nmero de pedidos ao servidor
aumenta drasticamente durante alguns dias.
Escalabilidade
Scale Up
24
A PROGRAMAR
Introduo s SQL Azure Federations
Multi-tenant
Sharding
Quando se desenha uma aplicao multi-tenant (multicliente), uma das primeiras e grandes opes que se tem
que tomar tem a ver com a distribuio ou no dos dados
dos clientes por vrias base de dados.
25
A PROGRAMAR
Introduo s SQL Azure Federations
Federation
Federations so os objectos que suportam a funcionalidade
de distribuio dos dados entre as vrias parties. Estes
objectos representam o schema da federation e contm a
chave da distribuio, o tipo de dados e o estilo da
distribuio. Na imagem anterior a base de dados AppDB
representa uma base de dados com federations. Uma base
de dados pode ter vrias federations.
Federation Member (Shard)
A cada partio de dados dentro de uma federation
chamamos federation member. Na imagem acima podemos
observar uma federation para a tabela Clientes com vrios
membros. Cada federation member contm uma parte dos
dados e suportado por uma instncia de base de dados
SQL Azure que fornece lhe capacidade de armazenamento e
computao.
Particionados
Atomic Unit
Uma unidade atmica representa todo o conjunto de dados
com a mesma federation key. Na imagem anterior podemos
observar que todos os clientes com ID=100 so uma unidade
atmica. Como o prprio nome indica, no possvel dividir
uma unidade atmica, ou seja, dentro de uma federation,
todas as tabelas com a mesma federation key ficam
garantidamente no mesmo federation member.
Exemplo
No objectivo deste artigo ensinar a criar e a manipular
federations mas para no defraudar alguns leitores mais
curiosos vamos ver alguma ver um exemplo para que
possamos ficar desde j familiarizados com alguma sintaxe.
26
A PROGRAMAR
Introduo s SQL Azure Federations
No futuro termos mais operaes disponveis tais como:
-- Ligao ClientesFed
USE FEDERATION ClientesFed (ID=0) WITH RESET,
FILTERING=OFF
Fase 1
Nesta primeira fase instanciadas duas novas base de dados
para alojar, uma para cada parte dos dados. Essas bases de
dados tero o estado SPLITTING na tabela sys.databases.
27
A PROGRAMAR
Introduo s SQL Azure Federations
Repare que o downtime que existe muito pequeno porque
trata-se apenas de alteraes na metadata e mascarado
pela retry logic que devemos ter nas aplicaes que usam
SQL Azure e portanto o erro no chega a ser visvel aos
utilizadores da aplicao.
Concluso
A plataforma Windows Azure j permitia a construo de
camadas de apresentao e camadas de lgica de negcio
altamente escalveis mas estava ligeiramente atrs no que
respeita a camadas de acesso a dados sobre bases de
dados. As camadas de acesso a dados sobre storage j so
altamente escalveis mas agora as SQL Azure Federations
vm trazer ao SQL Azure a mesma possibilidade sem que
tenha que existir uma implementao manual do padro de
sharding.
Referncias
Building Scale-Out Database Solutions on SQL Azure - Lev
Novik
http://bit.ly/dUS2P6
Building Scalable Database Solutions Using Microsoft SQL
Azure Database Federations - Cihan Biyikoglu
http://bit.ly/mSL5nW
Your Data in the Cloud - Cihan Biyikoglu
http://bit.ly/fnxTNn
AUTOR
Escrito por Vtor Tomaz
Consultor independente na rea das tecnologias de informao. Tem especial interesse por cloud computing, programao
concorrente e segurana informtica. membro de algumas comunidades tais como Portugal-a-Programar, NetPonto,
AzurePT, HTML5PT e GASP.
28
A PROGRAMAR
Enigmas do C#: Arrays
Devido a esta covarincia de arrays, as atribuies de valor
a elementos de arrays de tipos referncia inclui uma validao em tempo de execuo para garantir que o valor atribudo ao elemento do array de um tipo permitido. Se tal no
acontecer, ser lanada uma
System.ArrayTypeMismatchException
Explicao
Concluso
A utilizao de arrays deve ser mantida privada ou em situaes em que a sua errada manipulao no pode levar
inconsistncia dos sistemas, como o caso de leitura ou
escrita de streams.
Para os restantes casos, deve ser usada a mais simples
interface que satisfaa os requisitos. Por exemplo, se apenas
se pretende enumerar os elementos, IEnumerable<T> o
suficiente. Se ICollection<T> for suficiente, no se deve usar
IList<T>.
Ligaes
Mas porque isto apenas vlido caso exista uma converso
de referncias, o seguinte cdigo no vlido:
C# Reference http://bit.ly/tfDPKa
Esta relao designada por covarincia de arrays. A covarincia de arrays, em particular, significa que um valor de um
array do tipo A[R] pode ser uma referncia para um array do
tipo B[R], desde que exista uma converso implcita entre B
e A.
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.
29
COLUNAS
VISUAL (NOT) BASIC Um pouco mais de Windows Phone 7
CoreDump Free as in Beer
Tiles
precioso na medida em que para estes tiles que o utilizador tem de olhar praticamente cada vez que desbloqueia o
telefone. Se a aplicao puder de alguma forma dar feedback atravs desses tiles, conseguimos chamar a ateno
do utilizador sem precisar de correr a aplicao, ou de l
estar. um local onde suposto estarem todas as notificaes de todos os sistemas dos quais se esperam notificaes.
31
tile.BackBackgroundImage = New
Uri("/imagens/backtile.png", UriKind.Relative)
tiles.Update(tile)
Para utilizaes mais especficas, tambm possvel programar uma actualizao a um tile.
A actualizao automtica possvel com ShellTileSchedule,
mas apenas possvel actualizar a imagem de fundo, a partir de um URL:
Pode demorar at uma hora para que uma actualizao surta efeito.
Em baixo, o resultado da programao programada do cdigo exemplo:
Por exemplo, apontando para o ltimo tile, no caso de termos apenas tile principal e um secundrio:
lupa:
StandardTileData
BackBackgroundImage
Imagem de fundo da face traseira
32
Resources
BackContent
Texto a apresentar no corpo da face traseira
BackgroundImage
Imagem de fundo da face dianteira
BackTitle
Texto a apresentar no ttulo da face traseira
Count
Title
Texto a apresentar no ttulo da face dianteira
ShellTileSchedule
Interval
Define a frequncia da actualizao. Definida por um
Enum
MaxUpdateCount
Recurrence
RemoteImageUri
Endereo da imagem a utilizar para a actualizao do
a partir desta coleco que se pode consultar, entre dezenas de outros parmetros, a Accent color que o utilizador
escolheu e se o tema escuro ou claro.
tile
Start
Inicia a actualizao programada
StartTime
Application.Current.Resources.Add
("urlPAP", New Uri
("http://www.portugal-a-programar.org"))
MessageBox.Show(DirectCast
Application.Current.Resources("urlPAP"),
Uri).AbsoluteUri)
Stop
Interrompe e termina a actualizao programada
33
Application.Current.Resources.Add
("parametro1", "teste!")
MessageBox.Show
(Application.Current.Resources
("parametro1))
Para as utilizar basta usar uma das chaves expostas no dicionrio Resources.
Tipo SolidBrush
PhoneForegroundBrush
PhoneBackgroundBrush
Por exemplo:
Application.Current.Resources_
("PhoneDarkThemeOpacity")
DeviceStatus
Para alm dos parmetros de cor, tamanho e outros, que
nos permitem a integrao visual da nossa aplicao, necessrio tambm conhecer o aparelho para determinar de
que forma se dever adaptar e como se dever comportar.
Tipo Color
PhoneBackgroundColor
PhoneForegroundColor
PhoneFontSizeSmall
PhoneFontSizeNormal
PhoneFontSizeMedium
PhoneFontSizeMediumLarge
PhoneFontSizeLarge
PhoneFontSizeExtraLarge
PhoneFontSizeExtraExtraLarge
PhoneFontSizeHuge
Tipo Visibility
Microsoft.Devices.Sensors.Compass.IsSupported
Microsoft.Devices.Sensors.Gyroscope.IsSupported
34
ApplicationBar.MenuItems.Add
(New ApplicationBarMenuItem("item1"))
ApplicationBar.MenuItems.Add
(New ApplicationBarMenuItem("item2"))
ApplicationBar
Todas as aplicaes tm a possibilidade de usufruir de um
menu configurvel, e de comportamento e contornos transversais ao sistema operativo.
No est includo qualquer handling dos eventos necessrios para o funcionamento, como o click.
Basta acrescentar um handler por cada boto ou item, por
exemplo:
AddHandler appBot.Click, AddressOf BotaoTocado
Caso no seja adicionada via XAML, a propriedade ApplicationBar estar nula at que uma instncia de ApplicationBar
lhe seja atribuda.
As imagens a utilizar como cones dos botes, devero ser
PNG, e devero ser marcadas com a Build Action Content
para que possam ser utilizadas.
IsolatedStorage
No obrigatrio utilizar ambos, assim como no obrigatrio utilizar apenas um em detrimento do outro: o seu uso est
ao nosso critrio.
Podem existir um mximo de 4 botes, e os botes podem
ou no utilizar uma pequena descrio.
ISTF.CreateDirectory("pasta")
ApplicationBar.BackgroundColor = Colors.Red
ApplicationBar.ForegroundColor = Colors.LightGray
ApplicationBar.Opacity = 1D
ApplicationBar.Buttons.Clear()
ApplicationBar.MenuItems.Clear()
Dim appBot As New ApplicationBarIconButton
appBot.Text = "boto!"
appBot.IconUri = New Uri("/imagens/perg.png",
UriKind.Relative) 'build como content
ApplicationBar.Buttons.Add(appBot)
35
O BackgroundTransferService recebe BackgroundTransferRequest, e cada um destes pedidos pode implicar o download de um ficheiro para a IsolatedStorage, ou o upload de um
ficheiro da IsolatedStorage.
Em ambos os casos, importante que os handlers TransferProgressChanged e TransferStatusChanged sejam registados para que se consiga dar feedback ao utilizador.
Neste local, nos possvel criar pastas, ficheiros, copiar ficheiros, consultar datas de modificao, virtualmente todas
as operaes com ficheiros que teramos em um outro sistema de ficheiros, incluindo listagens. Assim como qualquer
outro sistema de ficheiros, a IsolaredStorage tambm tem
um limite. Esse limite est pr-definido para cada aplicao,
com uma quota.
AddHandler BGT.TransferProgressChanged,
AddressOf repProgresso
AddHandler BGT.TransferStatusChanged,
AddressOf repEstado
Background Transfers
A propsito das IsolatedStorages, sendo esses os locais
onde se devem operar ficheiros, importante referir as Background Transfers.
36
Leitura do exterior
Acelermetro, giroscpio e bssola
Os aparelhos WP7 esto, tipicamente, munidos de componentes que lhe permitem perceber como que esto a ser
orientados e movimentados no espao fsico.
Estes trs componentes funcionam todos de forma semelhante, mas do leituras distintas.
Estas leituras podem ser utilizadas em separado, ou em conjunto para se complementarem em determinadas aplicaes.
A classe Motion do namespace Sensors utiliza as leituras
destes componentes para calcular movimentos e orientaes
com mais preciso (por exemplo para realidade aumentada).
If Sensors.Accelerometer.IsSupported Then
Dim Accel As New Sensors.Accelerometer
Accel.TimeBetweenUpdates =
New TimeSpan(0, 0, 0, 0, 100)
AddHandler Accel.CurrentValueChanged,
AddressOf dadosAccel
Accel.Start()
End If
Next
Indeterminate ProgressBar
Em algumas operaes onde no possvel prever o tempo
de execuo ou no se possa quantificar o progresso as
Indeterminate ProgressBars so importantes porque oferecem um feedback visual ao utilizador, que indica que alguma
coisa est a executar e far consequentemente com que
aguarde.
Cada sensor preparado de maneira semelhante, configurando qual o intervalo de tempo entre as actualizaes (ou
seja, qual a frequncia com que a leitura feita), adicionando o handler para reportar as leituras, e no caso da bssola
um handler que dispara caso se detecte que a preciso da
bssola est afectada de forma a que seja necessrio calibrar.
A captura comea assim que o mtodo Start for chamado, e
termina quando for chamado o Stop.
Na verdade, uma Indeterminate ProgressBar uma progressbar comum, mas com a propriedade IsIndeterminate verdadeira.
37
Leitura do acelermetro
Do giroscpio:
Private Sub dadosGyro(sender As Object, e As _
Sensors.SensorReadingEventArgs(Of _
Sensors.GyroscopeReading))
Deployment.Current.Dispatcher.BeginInvoke(
Sub()
Dim rrX As _
Microsoft.Xna.Framework.Vector3 =
e.SensorReading.RotationRate
End Sub)
End Sub
Leitura da bssola
E do acelermetro:
38
Leitura do GPS
A velocidade dada em metro por segundo, orientao em
graus relativos a norte, altitude e precises em metros.
Cada relatrio de posio tambm acompanhado por uma
estampa de tempo (Location.Timestamp).
Em suma
Apenas a criatividade em conjunto com a utilidade ditam o
sucesso de uma aplicao, mas importante ter conhecimento das possibilidades que nos so oferecidas.
Existem muito mais pequenas e grandes funcionalidades
que merecem ser exploradas: apenas foquei as que considero de maior interesse e que podem ser integradas num maior
nmero de aplicaes, tratem elas do que tratarem.
AUTOR
Srgio Ribeiro, curioso e auto-didacta com uma enorme paixo por tecnologias de informao e uma saudvel relao com
a .NET framework.
Moderador do quadro de Visual Basic.NET na comunidade Portugal@Programar desde Setembro de 2009.
Alguns frutos do seu trabalho podem ser encontrados em http://www.sergioribeiro.com
39
CoreDump
Free as in Beer
Open Source Software (OSS), free as in speach, not as in
beer...
As organizaes imaturas continuam, e acredito que continuaro, a escolher o OOS por o conceberem como gratuito.
Mas quando a escolha de um produto se foca no preo de
aquisio do mesmo, corre-se o risco da escolha no se
adequar realidade ou s necessidades da organizao.
Escolher OSS, ou um software proprietrio gratuito, nesta
base revela uma falha enorme ao nvel da gesto, fazendo
com que a organizao incorra em custos no previstos e
alguns dissabores. Esse custos so, muitas vezes, operacionais e escondidos, ou varrido para debaixo do tapete. Por
exemplo, quando algum tem de fazer uma quantidade de
trabalho manual adicional para completar uma tarefa que
deveria ser totalmente automatizada.
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.
40
COMUNIDADES
AzurePT - Multiplas identidades no seu WebSite usando Windows
Azure AppFabric ACS
NetPonto - Biztalk Server - Princpios Bsicos dos Mapas
COMUNIDADE AZUREPT
Multiplas identidades no seu WebSite usando Windows Azure AppFabric ACS
podemos inclusivamente deixar de utilizar o mesmo se
no existir alternativa, mais uma vez porque a confiana
absolutamente crucial quando falamos de questes relacionadas com cartes de crdito, identidades, e outras informaes sensveis. A situao seria completamente diferente se
o website nos desse a possibilidade de no colocar os dados
directamente no mesmo, mas sim redireccionar-nos para um
website de um banco, ou PayPal ou outro qualquer sistema
no qual eu tenha uma elevada confiana para tratar os meus
dados.
Introduo
Uma das questes que actualmente mais se tem falado o
facto de existirem demasiadas identidades actualmente na
internet, pois quem no passou at hoje pelas seguintes
questes quando chega a um website, ser que j me registei neste website?, qual ser o utilizador que utilizei no registo?, para j no falar na dificuldade de lembrar da palavra-chave que foi utilizada para o mesmo. Com todas estas
questes o que em muitas situaes acontece que comeamos a ter quase um padro para o nome do utilizador e
palavra-chave que utilizamos no registo nos websites, o que
no claramente uma boa prtica de segurana, mas isso
ou andar com uma aplicao em que descrevemos todos os
websites em que nos registamos, juntamente com o nome do
utilizador e palavra-chave utilizada. Isto sempre uma mina
de ouro porque se algum apanhar esta informao estamos completamente agarrados, porque nem sequer sabemos todos os locais em que determinada identidade existe.
Conceitos base
Para que consigamos responder a esta questo necessitamos de em primeiro lugar compreender os conceitos que
se encontram na base desta soluo. E para iniciarmos vamos olhar para o conceito de IdP Identity Provider, que
uma aplicao/soluo que tem como funo principal gerir
identidades. Neste caso como fornecedores de identidade
teramos o LiveId, GoogleId, TwitterId, FacebookId, etc. Uma
das vantages de utilizarmos estes fornecedores de identidades que a maioria das pessoas j tm um deles ou mais, e
isso ir permitir que o utilizador para poder utilizar a nossa
soluo no passe a ter mais uma identidade digital.
42
COMUNIDADE AZUREPT
Windows Azure AppFabric ACS
At aqui tudo bem, agora s falta compreender como que
poderemos efectuar a relao de confiana entre o RP e o
IdP e como poderemos utilizar um FG para que possamos
ter mais do que um IdP.
Soluo
Mas como poderemos solucionar este problema com o Windows Azure AppFabric ACS? Para isso necessitamos de ter
instalado o Visual Studio 2010 SP1, as Windows Azure Tools
for Visual Studio 2010, preferencialmente a verso 1.6 que
saiu ainda muito pouco tempo e o WIF Runtime e SDK.
Problema
Tendo todos estes conceitos em conta, o problema que
ns queremos criar uma relao de confiana para com diversos IdPs e por isso mesmo necessitamos de um FG, e
uma vez que estamos num ambiente Web, dentro do
browser iremos utilizar a Federao Passiva, uma vez que
ser possvel efectuar o redireccionamento.
43
COMUNIDADE AzurePT
Windows Azure AppFabric ACS
Ao escolhermos o boto Access Control Service que se encontra no topo do portal passamos imediatamente ao portal
de gesto deste mesmo servio.
Se lanarmos agora o WebSite temos que um site normalissimo com uma gesto de identidade tradicional.
Neste portal a primeira operao que iremos efectuar definir os Identity Providers que iremos disponibilizar, e neste
caso vamos escolher Google e Yahoo.
Ficando com o seguinte:
44
COMUNIDADE AZUREPT
Windows Azure AppFabric ACS
E que neste caso desejamos utilizar um STS j existente,
que ser o que foi criado no momento em que efectuamos o
pedido de gerao do namespace para Access Control Service no Windows Azure.
45
COMUNIDADE AZUREPT
Windows Azure AppFabric ACS
A partir deste momento o nosso WebSite est registado no
ACS e tambm a relao de confiana est efectuada. Alm
de tudo isso, as regras de converso dos diversos IdPs utilizados foram efectuadas automticamente.
Agora vamos terminar as configuraes do lado do nosso
WebSite, e para isso iremos retirar do web.config todas as
entradas relativas a authentication, membership, profile e
roleManager, uma vez que tudo isto ser da responsabilidade do ACS a partir deste momento.
Agora lanamos novamente a soluo e tudo funciona, sendo que antes de chegarmos ao nosso WebSite temos o seguinte quadro que nos permite escolher o IdP que queremos
utilizar.
Concluso
Em resumo, todos concordamos que importante que cada
vez existam menos identidades digitais espalhadas pela Internet, e por isso mesmo a Federao de Identidade uma
soluo muito interessante, o problema que nem sempre
simples. Neste caso, o Windows Azure AppFabric Access
Control Service vem ajudar-nos substancialmente na medida
em que simplifica muito o processo tratando de toda a configurao e instalao necessria para este tipo de sistemas,
e com o auxilio da WIF Windows Identity Foundation, torna
muito simples conseguir o resultado esperado.
AUTOR
Escrito por Nuno Godinho. Consultor Independente com 10 anos de Experincia e principal responsabilidade de ajudar os
clientes a identificar, planear, gerir e desenvolver solues e produtos de software. Especialista em Tecnologias Microsoft.
Orador em alguns dos maiores eventos de desenvolvimento da Microsoft Portugal como MSDN, TechDays, DevDays, alm de
eventos internacionais como TechEd Europa, TechEd Online Worldwide, MVP Nation e CloudViews.Org. Microsoft MVP h 4
anos, inicialmente em ASP.NET e a partir do incio deste ano em Windows Azure com blogs em http://bit.ly/ufTstn (Portugus
e Ingls) e http://bit.ly/s6f5ec (Ingls), INETA Country Leader por Portugal, e parte da equipa de gesto de por diversas comunidades Portuguesas como PontoNetPT, XAMLPT e Fundador da AzurePT (Windows Azure em Portugus)."
46
COMUNIDADE NETPONTO
http://netponto.org
Converter as mensagens que podem estar em diferentes formatos (arquivos de texto (Flat File), arquivos
compactados - ZIP), para o formato que o BizTalk usa
internamente para processar as mensagens: XML
(Extensible Markup Language).
Arquitectura
As mensagens entram no BizTalk atravs de uma porta lgica (portas de recepo ou Recieve Port) que so compostas
por 1 ou varias portas fsicas (locais de recepo ou Recieve
Locations). Cada local de recepo possui uma configurao
especfica para um adaptador, como podemos verificar no
exemplo seguinte:
Os mapas de BizTalk so representaes grficas de documentos XSLT (Extensible Stylesheet Language Transformation) que permitem efectuar, de forma simples e visual, transformaes s mensagens XML.
47
COMUNIDADE NETPONTO
http://netponto.org
XML Schema (XSD - XML Schema Definition) define o formato das mensagens;
E XSLT (Extensible Stylesheet Language Transformation) define as regras de tranformao das mensagens;
Transformaes de Sintaxe: este tipo de transformaes ocorrem nas pipelines de recepo ou envio
e tm como objectivo transformar um documento noutra representao, por exemplo de CSV para XML.
Aqui o documento mantem os mesmos dados
(semntica), mas muda a sintaxe com que representado. Ou seja traduzimos o documento mas, normalmente, no o modificamos em termos de estrutura. Por norma este tipo de transformao bidireccional, uma vez que continuamos a ter o mesmo contedo semntico. Podemos aplicar a mesma lgica de
transformao e voltar a obter um documento no seu
formato original.
A grande diferena entre utilizar nas portas ou em orquestraes, que a utilizao na ltima pode ter mltiplos inputs
de mensagens (transformaes de vrios documentos para
um documento final transformaes N1) e nas portas
apenas permite uma nica mensagem de input
(transformaes 11).
Transformaes de Semntica: este tipo de transformaes ocorre por norma apenas nos mapas de
BizTalk. Aqui o documento mantem a mesma sintaxe
com que representado (XML), mas muda a sua semntica. Tipicamente so operaes One-way, uma
vez que quando extramos e agregamos partes de
informao de um documento e compomos um outro
documento diferente, podendo perde detalhes importantes para a sua reconstruo.
48
COMUNIDADE NETPONTO
http://netponto.org
Ligaes e Functoids
As transformaes num mapa podem ser definidas na forma
de relaes simples, como copiar um nome ou um endereo
de um documento para outro. Podemos expressar uma cpia
directa dos dados usando uma ligao, que representada
no BizTalk Mapper Designer como uma linha que liga os
elementos da origem para os elementos de destino.
49
COMUNIDADE NETPONTO
http://netponto.org
BizTalk fornece um extenso conjunto de functoids que podem ser usadas nos mapas para executar uma variedade de
operaes nos dados que esto a ser transformados a partir
de uma mensagem de origem para uma mensagem de destino.
Conversion Functoids: Funes tpicas de converso de valores como: converso de caracteres para
ASCII ou de nmeros de uma base para outra
(Hexadecimal, decimal).
Mathematical Functoids: Utilize as functoids matemticas para executar clculos numricos especficos, como adio, multiplicao ou diviso.
Grelha de Mapeamento
A grelha de mapeamento desempenha um papel crtico na
definio de mapas, ela ir conter as ligaes e functoids
que iro controlar a forma como os dados de origem de uma
mensagem so transformados numa mensagem de destino
de acordo com o seu esquema.
A grelha poder ter mltiplas camadas, num mximo de 20,
chamadas de pginas. Particionar os mapas em diferentes
pginas, alm de ser uma boa prtica, pode-se tornar extremamente til por forma a organizar-nos e desta forma tornlos mais legveis. Apesar de em pequenos mapas, uma pgina ser suficiente, quando lidamos com esquemas complexos
como EDI, infestar uma pgina com inmeras ligaes e
functoids torna-os ilegveis, chegando ao ponto de no conseguirmos distinguir um elemento do outro.
Podemos definir as pginas como contentores de ligaes e
functoids, que servem apenas para organizar os mapas, isto
porque ao nvel do compilador no tm qualquer impacto
uma vez que so invisveis.
Operaes possveis nas pginas
Por defeito os mapas so criados com apenas uma pgina,
com o nome Page 1, apesar das operao mais frequentes
serem a de criao e renomeao, so 4 operaes as operaes que podemos efectuar sobre as pginas:
50
COMUNIDADE NETPONTO
http://netponto.org
Concatenao de valores
Concatenar diferentes valores da origem para um determinado elemento no esquema de destino outra das operaes
quotidianas em transformaes, para isso apenas necessitamos de:
Quando estamos a efectuar uma transformao de mensagens so 5 as funcionalidades bsicas que normalmente nos
surgem:
Concatenao de valores
Seleces condicionadas
Scripts customizados
Seleces condicionadas
Muitas das vezes no queremos simplesmente mover valores da origem para o destino, s vezes necessitamos de
gerar a sada dos dados de acordo com certas condies.
Podemos efectuar estas condies de muitas formas distintas atravs de functoids ou scripts customizados, aqui fica
um exemplo: Testar se o valor na origem uma string vlida,
se sim mape-la para o esquema de origem, para isso necessitamos:
51
COMUNIDADE NETPONTO
http://netponto.org
Arrastar uma ligao do elemento pretendido da origem para a functoid Logical String, neste caso o
elemento CodigoPostal;
Inline XSLT: Esta opo permite-nos associar e invocar scripts XSLT directamente na functoid (Inline
Script Buffer property).
Inline XSLT Call Template: idntico anterior, no entanto esta permite-nos invocar templates XSLT directamente da functoid.
Scripts customizados
Scripts customizados so utilizados normalmente em transformaes mais complexas ou por forma a facilitar algumas
condies. Basicamente existem dois cenrios para utilizarmos esta functoid:
Ou quando a utilizao das functoids existentes tornam-se extremamente complexas para resolver um
problema do mapeamento.
52
Efectuar duplo click na functoid Scripting e seleccionar o separador Script Functoid Configuration;
COMUNIDADE NETPONTO
http://netponto.org
Pginas
Pginas
As pginas permitindo organizar os mapas, especialmente
os mais complexos, em subdivises lgicas de mapeamentos. Esta funcionalidade j foi descrita anteriormente.
Nota: Como podem verificar, esta functoid no requer nenhum dado de entrada, retornando a data e hora actual do
sistema.
COMUNIDADE NETPONTO
http://netponto.org
Testar mapas
Validar mapas
Depurar mapas
Premir o boto direito do rato sobre o mapa e seleccionar a opo Test Map
54
COMUNIDADE NETPONTO
http://netponto.org
Uma ligao para o XSLT gerado ser apresentada na janela de sada (Output).
Nesta janela tambm podemos configurar diversas propriedades como: o formato de entrada e sada dos documentos,
assim como o caminho final do documento de sada, mas
mais importante podemos configurar se pretendemos validar
os formatos de entrada e sada com os respectivos esquemas.
Esta opo permite-nos validar a estrutura do mapa. Podemos desta forma inspeccionar e analisar o cdigo XSLT ge-
55
COMUNIDADE NETPONTO
http://netponto.org
Podemos definir o
BizTalk como um servidor de encaminhamento de mensagens,
capaz de tratar, validar, transformar e
controlar inmeros
processos
Concluso
Devido ao inmero nmero de sistemas e aplicao distintas
existentes nas organizaes, imperativo usar boas ferramentas e tcnicas para produzir solues que funcionem
durante muitos anos de uma forma controlada e fcil de
manter. Ao mesmo tempo novos processos so adicionados
e os existentes vo sofrendo pequenas melhorias, tudo sem
perder o rasto ao que est a acontecer em produtivo.
O BizTalk ajuda-nos a resolver muitos destes problemas,
dispondo de inmeras funcionalidades out of the box com o
produto. Neste artigo acho que consegui explicar de uma
forma intuitiva os principais conceitos bsicos dos mapas de
BizTalk, medida que exploramos o seu editor.
AUTOR
Escrito por Sandro Pereira
Actualmente Senior Software Developer na empresa DevScope. Microsoft Most Valuable Professional (MVP) em Microsoft
BizTalk. O seu principal foco de interesse so as tecnologias e plataformas de Integrao (EAI): BizTalk e SOAP / XML /
XSLT e Net, que utiliza desde 2002. um participante bastante activo nos fruns da Microsoft (MSDN BizTalk Server Forums), contribuidor no MSDN Code Gallery e autor do Blog: http://bit.ly/oFLwB4- Twitter: @sandro_asp Membro da comunidade BizTalk Brasil: http://bit.ly/9NI7ie
56
e muito mais em
www.revista-programar.info