Friday, December 29, 2006

Windows Vista RTM: Impressões

Nas últimas duas semanas tenho estado a usar o Windows Vista no meu portátil (Dell D820: dual core, 2.11ghz, 2gb ram, sata), e estou bastante satisfeito com a experiência até agora. Não tive quaisquer problemas com drivers em falta, nem incompatibilidades de maior: o Camtasia Studio 4 da TechSmith (só pode ser usado para captura, não para edição; já o SnagIt 8.2 funciona na perfeição, o Camtasia não deve demorar). O PerfectDisk 8 da Raxco já suporta Vista, bem como o TrueImage Home da Acronis ou o Microsoft Money 2007 e o Office 2007, obviamente. Outros que já testei sem ter problemas são o Skype, o FeedDemon, o CoreFTP, o Windows Live Writer e o Acrobat Reader 8. O Intellipoint (6.1) para o meu Wireless Laser Mouse 6000 faz um flicker quando uso o magnifier, acho que é este o único problema de drivers que tenho até agora (apesar de ser chato, porque usava muito o magnifier).

Em relação a ambientes de desenvolvimento, é sabido que o Visual Studio 2005 e algumas versões do Sql Server parecem ter pequenos problemas de compatibilidade. Para contornar isto, enquanto não for corrigido definitivamente, recomendo vivamente (aliás, mesmo com XP) que se desenvolva exclusivamente em Virtual Machines, quer com o Virtual PC (o beta do 2007 está disponível no Connect e tem funcionado bastante bem) quer com o Virtual Server 2005 R2. Não sei como se comporta o Vmware sobre Vista, mas suponho que já haja alguma versão a suportá-lo.

Em relação a aspecto gráfico, o Aero é um espectáculo! :-) Apesar de a placa gráfica não ser nada do outro mundo (NVidia Quadro nvs120), a imagem é muito agradável e rápida q.b. para a minha utilização, apesar de ser o item mais fraco do meu Vista Performance Index (o processador e disco estão acima dos 5, os gráficos pelo 3.5). No único jogo que tenho instalado, o Company of Heroes, o desempenho aumentou das 6fps no Xp Sp2 para 10fps no Vista, o que é interessante (sempre com os drivers mais recentes).

Outro aspecto que me agrada bastante é o novo "menu de Start". Em vez da habitual navegação em menus à procura da aplicação a lançar (que ainda é possível, mas de outra forma), o acesso às aplicações é baseado na pesquisa. Se quero lançar o Word escrevo "w" e carrego em return. Os primeiros resultados da pesquisa são sempre as aplicações, depois os favoritos, e finalmente os meus documentos. Muito conveniente, e mais rápido que o método tradicional.

Um aspecto a que ainda não me habituei é o novo Windows Explorer (porque é que não consigo remover dali o "Favourite Links"?), apesar de ter detalhes interessantes, como a caixa de pesquisa. A estruturação das pastas "built-in" mudou (por exemplo, "Documents and Settings" desapareceu), agora é simplesmente c:\Users\jota\ . Aqui existe uma estrutura de pastas com Favoritos, Imagens, Pesquisas, Contactos, Documentos, Desktop, Downloads. Não tenho nada contra isto, mas nunca recorri à estrutura de pastas sugerida pelo Windows para guardar as minhas coisas, e não é agora que vou começar :-) . Já os gadgets são algo que tem piada, e cada vez há mais na galeria. Acho estranho o facto de serem programados em Javascript, no entanto.

Estou à espera do meu USB Apacer Handy Steno para testar o ReadyBoost.

No geral, a minha impressão é bastante positiva, e estou satisfeito com a mudança. Recomendo!

Tuesday, December 26, 2006

BizTalk 2006 r2 e adaptador WCF

Talvez a maior novidade prevista para o BizTalk Server 2006 R2, que vai sair em meados de 2007, seja a integração com o Windows Communication Foundation (bom, isto para não falar do novo suporte para EDI e RFID).

Já tive oportunidade de fazer alguns testes, com a primeira CTP e o Beta1, mas o Stephen Thomas fez um vídeo de 13 minutos que exemplifica o processo. Disponível aqui.

Uma discussão que tem acontecido várias vezes tem a ver com o espaço do produto BizTalk num panorama tecnológico que agora inclui o WWF e o WCF. Estas plataformas vão funcionar em simbiose com o produto base, eventualmente substituindo alguns dos componentes nativos existentes hoje (wwf em vez de orchestration, wcf em vez de alguns dos adaptadores), mas o coração do produto é o motor pub/sub, que se mantém.

Tuesday, December 19, 2006

NewsGAtor's FeedDemon

Uma prenda de Natal da NewsGator: durante o mês de Dezembro, usando o código de promoção "NGHoliday", tem-se um desconto de Usd 10 no FeedDemon (fica a Usd 19,95). Troquei o SharpReader pelo FeedDemon 2.1, claramente superior, com o extra de incluir ainda o FeedStation que faz download e sincronização de podcasts.

Algumas das features que me agradam mais: tabbed browsing, watches (espécie de "blog virtual", construído com base em termos de pesquisa pré-especificados), news bin (posts favoritos), rank de blogs em que passo mais tempo, e o facto de usar pouca RAM (mesmo com 200+ subscrições).

Recomendo vivamente!

Thursday, December 7, 2006

BizTalk2006: Application, Promoted Properties and the Management console

BizTalk 2006 introduced the concept of Application, allowing an easier management of deployments, by grouping together related artifacts as "logical applications". This concept has a somehow imperfect implementation, however.

Imagine I create an Application where I place shared schemas that are to be used by a set of Applications. One of these shared schemas is a property schema.

I now create a second application, and try to create a messaging filter in a send port for example: the properties in the shared property property schema in the other application will not be visible in the available properties list.

There is a way around this, as this is only an interface limitation. You can either use the binding files, or just start up Visual Studio 2005, open the BizTalk Explorer pane and add the filters you want to the appropriate send ports. BizTalk Explorer knows nothing about the Application concept.

If you create the send ports in BizTalk Explorer, they will be placed in "BizTalk Application 1", and you can move them into your application using the Admin Console (select > Move to Application).

Maybe a future version of the product could include a concept such as "dependent application", to work around this nagging limitation.

Sunday, November 19, 2006

Pro BizTalk 2006 (Dunphy and Metwally)

I have recently bought the two books Apress put out about BizTalk 2006, "Pro BizTalk 2006" and "BizTalk 2006 Recipes", and started by reading the first. After the first hundred pages, I can say that this is possibly the most in-depth BizTalk book I've read (versions 2000/2002 included :-)), with several details about the insides of BizTalk Server and little tips that can be helpful, and I highly recommend it as a medium/advanced book for developers and architects.

There are some aspects of what I've read so far that I dislike, however, and where I think the authors could have selected different approaches:

  • Naming Conventions: the book includes a set of BizTalk naming conventions, essential in BizTalk development, but what I think is unnecessary is (table 2.3, p.61) the definition of prefix/identifier-based conventions for the names of shapes in Orchestrations.
    Example: If the graphical shape itself represents a Send, why have its name be "Snd_MessageName" and instead of simply "MessageName"? That's 4 characters wasted in a shape whose size does not grow to accomodate its name. Plus, if the names of the shapes are not identifiers (as variable or message names are), using underscores and casing instead of spaces and readable text is a loss of legibility.
  • Code Examples in VB.NET: I have never met a BizTalk 2004/2006 developer that uses VB.NET, C# is the language of choice. VB.NET might be a good selection if this was a beginner's book, but this not being the case, I personally think this is was a poor option.
    There are obviously personal preferences in this issue, but the fact that expressions are written in C#-like code, and that the code generated by the ODX cross-compiler is C#, might have been good objective reasons to a difference choice.
  • Factoring of Visual Studio projects: this is a topic that is more important than it seems, and frequently ignored both in published documentation and examples. The traditional wisdom, when doing BizTalk development, is to factor developments into projects named for example Project.Orchestrations, Project.Schemas, Project.Pipelines, etc., i.e., grouping by type of artifact. This book, unfortunately, makes similar recommendations.
    The problem of this type of recommendation is that it doesn't take in consideration operational issues, especially when long-running processes are involved: imagine you have 2 orchestrations and 2 schemas, and you factor these into a MyProject.Orchestrations and MyProject.Schemas projects. One of the orchestrations waits for a confirmation from a user, and is typically long-running, the other is short-lived. You deploy these into production environments, and all is well. Some time later, there is a need to update the schema used in the short-lived orchestration. What happens? To replace the schemas assembly you have to replace the orchestration assembly as well, and this terminates the long-running processes, which is not good. Having given some importance to the versioning issues, which can indeed help avoid this problem, the authors could have gone for a more refined approach in this factoring issue.
    I typically use two approaches: first, factor together artifacts that are versioned simultaneously (example: if a schema changes, it is very likely that any maps using it will also change). This is, by the way, the solution recommended in a Microsoft Webcast done by a couple of BizTalk Rangers a while back. Second, use Domain Driven Design techniques (and here I am referring to Allen's book with this title) and factor together semantically related artifacts. This also helps when teams of several developers are working in a BizTalk solution.
    Factoring BizTalk artifacts into projects is not a simple issue, but these techniques can help guide you in your developments.
  • Schema versioning:  the authors correctly recommend using the namespaces of schemas to do schema-versioning. What I dislike is the usage of .Net-like version numbers instead of schema change/publish date. In page 55, a suggestion is made to use http://Microsoft.BizTalk/Service/v1.0.0.0, where I think something like http://Microsoft.BizTalk/Service/2006/11/18 should be used instead. You do lose the immediate connection to the .Net version, but if schemas are to be published outside your organization or department, this shouldn't be exposed. Also note that using the date is frequent both in internal BizTalk schemas and W3C recommendations.

Also note that, in page 16, it should read "Windows SharePoint Services (v2.0)" instead of "SharePoint Portal Server".

Even with these issues, like I said at the start, I highly recommend this book. Buy it, you won't be disappointed. The only thing that is missing is Adapter development.

Thursday, November 16, 2006

Evento Msdn Better Together. For developers

No dia 22 de Novembro, próxima quarta-feira, no Porto, a Microsoft vai realizar um evento técnico que inclui sessões sobre Windows Vista, .Net 3.0 (WCF, WPF e WF), e o novo Office. As sessões de Office vão  focar-se em grande parte nas capacidades disponibilizadas pelo novo SharePoint 2007.

Neste evento, vou apresentar a seguinte sessão:

Soluções de Workflow e Processos de Negócio com formulários desenvolvidos em InfoPath 2007
A sessão apresenta as diferentes ferramentas disponíveis para construir e gerir as soluções baseadas em Microsoft Office InfoPath 2007. Apresenta o novo modelo de objectos do InfoPath, fala sobre a integração melhorada do Microsoft Visual Studio 2005, e sobre as novas caracteristicas como os templates, os ficheiros de ligação a dados partilhados, e a possibilidade de serem utilizados em ambientes Web e Windows. Conhecerá igualmente o desenvolvimento, gestão e a possibilidade de utilização de formulários desenvolvidos em InfoPath 2007 noutras aplicações. O servidor da Microsoft Office SharePoint 2007 apresenta o Business Data Catalog (BDC) como uma nova tecnologia para facilitar a ligação ao portal e as aplicações empresariais. Nesta sessão iremos analisar o BDC e a sua integração nas soluções existentes.

Apareçam!

Tuesday, November 14, 2006

BizTalk: faster to transform with maps or in code?

I have been testing a scenario hinted about in a discussion at TechEd with a fellow MVP. This is the basic idea: which is faster? using the BizTalk Mapper, which generates XSL-T underneath to convert between 2+ schemas, or do the transform in a custom Transform method written in C# in a class library project, that converts a source object into a target object (with these two being produced from the schemas using xsd.exe) with the appropriate assignments and serializations?

I am testing this out of curiosity only, because I plan on keep on using the Mapper due to its visibility and documentation advantages, but the code-based approach seems to be faster, even with simple maps containing direct-links only. The Map approach is a little faster when processing single messages, but as I increase the load the difference becomes greater in favor of the code approach.

I want to further test this, with complex scenarios (ex: using functoids and repeating structures), and will post my test code here when I'm done.

If the code approach proves to be superior in terms of performance, it may be a good idea to create a tool that generates C# code from a map, instead of XSL-T... in a BizTalk Server Software Factory, perhaps? :-)

Monday, November 13, 2006

Iron Architect: Contest Submission

Here is my submission to the Iron Architect contest at TechEd EMEA 2006, in PDF. Like I said in a previous post, the main difference between my submission and others was probably the inclusion of the Tag Cloud. This was actually my first idea when approaching the problem. The main issues I felt were in dealing with time slots and with the communication with the speakers and delegates.

Friday, November 10, 2006

Iron Architect: YEAH! :-)

Acabei de ganhar a final do concurso Iron Architect do TechEd 2006, com uma abordagem a um sistema de criação de comunidade para o evento. O factor diferenciador foi o recurso a um mecanismo de tagging para construir perfis de utilizadores, com base nas sessões em que cada pessoa participa. Daqui sai uma tag cloud pessoal, que pode ser usada para encontrar pessoas com interesses semelhantes, entre outras coisas.

Na sala estavam muitos dos portugueses da conferência, e agradeço-lhes o apoio, bem como os comentários e ajuda de outras pessoas do GASP, como o Hugo Batista, Tiago Pascoal, Filipe Clérigo, Paulo Morgado, entre outros. Thanks people! O Zé Tó da MS não pode ajudar, porque fazia parte da organização, mas agradeço-lhe, e ao Pedro Rosa, pelo incentivo à participação.

No juri estava o Beat Schwegler, o Ron Jacobs, Juergen Pfeifer, e uma pessoa da organização do evento. Suficiente para me deixar mais nervoso do que em qualquer outra apresentação pública que tenha feito. :-)

Não tenho o material comigo, mas quando tiver coloco aqui a apresentação.

O site da competição é este: Iron Architect.

Thursday, November 9, 2006

Mais TechEd Off-Topic

Ontem a noite foi de Country Drinks, num bowling perto do Centro de Conferências. Imensa gente na conversa e a jogar, foi divertido, e tive oportunidade de conversar com vários conhecidos que não via há anos e que reencontrei. O Pedro Rosa da MS levou as t-shirts da "Portuguese Team", que se pode ver aqui, e que na frente inclui os logotipos da Microsoft e do GASP. Porquê a frase? O Pedro um dia explica-vos. J

Aproveitei também para ir falar com o Lee Graber, Dev Lead da MS na equipa de BizTalk, e juntamente com outro MVP de BizTalk (somos espécies raras, entre muitos MVP's de ASP.NET) do Chipre, estive a esclarecer várias questões que tinha acumuladas. Soube dar-me alguns detalhes sobre aspectos concretos da implementação do "coração" do BizTalk, uma vez que muito do que existe foi desenvolvido por ele (por exemplo, muitos dos stored procedures), e mesmo da organização da equipa que desenvolve o produto. Muito interessante.

Da mesma forma estive com a "minha" MVP Lead da Microsoft, com o Damir Tomicic que está cá em representação da IASA (e está mais gente de outros chapters), e com dois holandeses do User Group .Net holandês, ambos MVPs e com livros publicados, a conversar sobre panoramas de tecnologias nos dois países, e cenários para publicação de livros. Trocar ideias e conhecer pessoas é um dos aspectos mais interessantes destas conferências.

DEV310 - WCF: Building Secure, Reliable and Transacted Distributed Services (Shy Cohen)

Tenho a impressão de já ter visto esta sessão em algum lugar. Sem muito de novo, foi mais um "refresh" de WCF. Em termos de segurança, requisitos que o WCF cumpre são coisas como:

  • Saber quem invoca um serviço
  • Controlar acesso a serviços
  • Garantir integridade das mensagens
  • Garantir confidencialidade do conteúdo das mensagens
  • Agir em nome de quem invoca um serviço

Ainda em termos de segurança, apresentou conceitos importantes como Credenciais, Claims, e Security Model, e mecanismos de segurança como Segurança no Transporte, Segurança ao nível da Mensagem, e Segurança com Federação (incluindo aqui a utilização de um STS). E se o WCF não fizer o que pretendemos? "extensibility in WCF can be complex, but it is completely possible".

Passando à componente de reliability, falou de questões como problemas de comunicação (ex: perda de pacotes), ou de processamento (como idempotência). Prosseguiu com a questão da transaccionalidade, tanto em termos de tx atómicas como de longa duração, e compensação (acção manual para reverter uma transacção que fez commit). Passou ainda por queues (inc. a dead letter queue) e poison messages e a sua detecção.

A terminar, a parte mais interessante, que faz sempre uma boa demo, tem a ver com reliable sessions, bastando sinalizar o cliente e o servidor com as configurações adequadas. A demo incluía um "cubo mágico" e a face do Don Box, com um intermediário que introduzia perdas nas invocações. Já deve ter sido feita 100x, mas tem sempre interesse.

Agora que o WCF já está em RTM, já não há desculpa para continuar a usar ASMX. E até meados de Dezembro, vem a Service Factory para WCF (que neste momento existe para ASMX apenas).

TechEd: Iron Architect contest

Não voltei a colocar resumos de sessões, porque tenho despendido o tempo livre que tenho a produzir uma submissão para o concurso Iron Architect do TechEd. O vencedor ganha financiamento para concorrer à certificação Microsoft Certified Architect, no valor estimado de €8000.

O problema a resolver é semelhante ao que foi lançado no TechEd em Boston, mas com o objectivo de conceber uma forma de agendar reuniões entre participantes na conferência, speakers e community leaders. Amanhã concorrentes seleccionados vão ter a oportunidade de em 10 minutos apresentar a sua solução ao juri (Beat Schwegler, Ron Jacobs, Juergen Pfeifer e Arvinda Sehmi...). Sei que há outro concorrente do GASP (o Luis Martins da Organtex, no Porto), o que não deixa de ser interessante. J Que ganhe o melhor, a minha proposta já seguiu.

Entretanto, há duas outras pessoas do GASP por aqui: o Paulo Cunha da IT Sector, no Porto, e o Nuno Cândido Antunes, do BPI. Andamos todos aos encontrões nas sessões de Arquitectura. J

A ideia de ter este tipo de concursos é bastante interessante: em sessões do GASP já foram feitos dois muito animados e design labs.

Wednesday, November 8, 2006

DEV323 - C# 3.0: Future Directions in Language Innovation (Anders Hejlsberg)

O dia começou cedo, aproveitei uma hora para fazer um hands-on lab com a Web Service Software Factory. Como acontece com outros, nem sempre se explica o raciocínio de cada passo, mas o essencial da criação dos tipos, mensagens, os contratos, etc., está bem explicitado.

Depois disto, fui à sessão de C# 3.0 do Anders Hejlsberg, criador do C#, Linq, etc. Já tinha visto a sessão antes, mas vale sempre a pena. Começou com uma perspectiva histórica: a primeira versão, com a .Net Framework 1.0, já tem quase 8 anos desde que começou a ser pensada, a primeira abordagem a Managed Code. Na versão 2.0, fez-se tudo que se queria ter feito na anterior mas não houve tempo, com grande destaque para os generics. Na versão 3.0, que aí vem, é onde se tem finalmente espaço para inovar, muito baseado nos alicerces mais sólidos da 2.0.

Os objectivos de design do 3.0 são/eram:

  • Integrar objectos, dados relacionais, e Xml
  • Tornar a linguagem mais consisa
  • Adicionar potencialidades de linguagens funcionais (como lamba expressions)
  • Não fazer a linguagem dependente de API's específicas
  • 100% retro-compatibilidade

Quais as novidades, então?

  • Local variable type inference – conveniência sintática que permite não ter de repetir o tipo que está a ser declarado, usando a keyword var. Exemplo: var d = new Dictionary<int, Order>(); em vez de Dictionary<int, Order> d = new Dictionary<int, Order>();Notar que a variável d é strongly-typed, a novidade trata-se de mera conveniência sintática.
  • Extension Methods - possibilidade de adicionar métodos a quaisquer classes existentes, como se lhes pertencessem. Isto evita termos de fazer métodos estáticos para adicionar funcionalidade. Exemplo: em vez de public static string MyContactenate(string s1, string s2), podemos fazer: public static string MyConcatenate(this string s1, string s2); e agora podemos chamar desta forma: s1.MyConcatenate(s2);
    Mais uma vez, trata-se de uma conveniência sintática, mas muito interessante.
  • Lamba Expressions – durante a licenciatura aprendi uma linguagem funcional chamada ML, em que reinam coisas chamadas lamba expressions. Apesar do aspecto relativamente académica, é um mecanismo muito interessante e poderoso em várias situações (convido-vos a investigar). O C# 3.0 inclui expressões lamba, que permite fazer coisas como: customers.FindAll(c => c.PostalCode == 1000). A lamba expression aqui seria algo como λc.c.PostalCode == 1000 . Pouco intuitivo talvez, mas muito poderoso.
  • Object Initializers – fácil de explicar com um exemplo. Consiste na possibilidade de inicializar objectos com invocações implícitas a propriedades: Ponto p = new Ponto{X=100, Y=50}; , em que X e Y são propriedades da classe P. Outra conveniência sintática.
  • Collection Initializers – parecido com o anterior, ilustrado mais uma vez com um exemplo: List<int> = new List<int> (10, 100, 20, 40);
  • Query Expressions – talvez o aspecto mais visível do C# 3.0, quando se investiga o Linq (Language Integrated Query), consiste na possibilidade de escrever "statements" de acesso a dados como se fossem Sql em C#, para aceder a arrays, xml's, bases de dados, etc. (qualquer coisa que suporte IEnumerable<T>). Este tema é enorme, e recomendo a todos que investiguem o assunto. Mais uma vez, são uma conveniência sintática, uma vez que os Select/Where/GroupBy são convertidos para invocações a métodos antes da compilação para IL.
  • Anonymous Types – usado, por exemplo, quando se faz uma query à BD e se devolvem apenas 2 dos campos de uma tabela. É criado um tipo automaticamente, strongly-types, para guardar o resultado. Exemplo: select new { Name = p.Name, Address = p.Address }; cria um tipo anónimo (sem nome...) com 2 campos do tipo string.
  • Expression Trees – quem conhece desenvolvimento de compiladores e análise sintática de expressões adivinha rapidamente o que isto é. A referência é a classe Expression<T> e o namespace System.Expressions .
  • Automatic Properties – outra conveniência sintática, permite criar automaticamente properties, da seguinte forma: public string Name { get; set; } cria a variável privada e métodos set e get.

A sessão teve algumas demos de Linq, impressionantes como sempre, e que podem tb ser vistas no Channel9 (vejam tudo o que está lá com o Anders). Foi uma boa sessão. A questão que se levanta é: todos estes mecanismos vão mesmo ser usados, de forma generalizada? Coisas como Lamba Expressions e o Query Expressions são poderosas, mas não são de compreensão imediata. Logo se verá, afinal ainda vamos no 2.0 . J

Tuesday, November 7, 2006

DEV401 - BizTalk Server 2006 for XML Developers (Aaron Skonnard)

Uma sessão nível 400 que devia ser 300, sem novidades ou muita profunidade. Algumas demos introdutórias, e a ilustração de aspectos onde o Xml é utilizado no BizTalk: o schema editor, o mapper (que é uma das jóias na caixa do BizTalk), XSL-T e o Flat-File Schema Wizard (uma ferramenta muito interessante, nova no 2006).

A maioria da informação apresentada pode ser lida em dois artigos que o Aaron publicou na MSDN em 2005 sobre o tema, ainda em BizTalk 2004, aqui e aqui.

ARC305 - Connected Systems - Part 2: Communication, Flow, Rules and Logic (Clemens Vasters e Steve Swartz)

O Clemens e o Swartz são ambos experientes e habituados a este tipo de eventos. Este ano têm uma série que fazem as dois, na track de Arquitectura, sobre diversos assuntos relacionados com Connected Systems. As sessões são sempre cheias de humor, e têm slides muito atraentes visualmente.

Nesta sessão, a segunda da série, começou por se apresentar três padrões de interligação locais: chamadas síncronas (local calls), utilização da thread pool (uma forma de mover trabalho para outro interveniente), e eventos (aqui exemplificado com eventos .Net). Analogamente, em termos globais, as analogias destes 3 padrões são, respectivamente: N-Tier (exemplo clássico: UI/Business/Data Access), Message Queues, e Publish-Subscribe.

Para o Swartz, só existem estes três padrões de interligação (sujeito a discussão, claro – por exemplo, como enquadrar o P2P neste esquema?): "My belief is that all other patterns are combinations of there three". Estes são frequentemente compostos, nas aplicações reais que desenvolvemos. No final da parte do Swartz, fez o mapeamento para tecnologias concretas, como MSMQ, BizTalk, WCF, ASMX, e Enterprise Services.

Aqui entrou o Clemens, que teve uma intervenção menos teórica, e começou por apresentar o Outlook como uma destas composições: Contactos e Notas são N-Tier, Inbox e Reminders são Pub-Sub, e a Outbox e as Tasks são Queues. Analogias interessantes. Depois do Outlook, ilustrou num Visio um exemplo do tipo Amazon, com identificação de padrões usados em cada um dos inúmeros componentes da arquitectura.

A sessão teve outros aspectos interessantes de referir, como onde deve estar a fronteira entre a utilização de configuração (ou regras, ou workflow) e código.

No geral, os tópicos abordados foram interessantes e são relevantes, valendo a pena pensar sobre o tema, no entanto a forma de apresentação acaba por parecer forçada e exagerada, não me deixando com vontade de ir a outras sessões da série. Julgo que seria melhor se limitassem o aspecto brincadeira e focassem mais na mensagem a transmitir.

TechEd Off-Topic

O GASP está representado em peso no TechEd: além de mim, e entre os cerca de 4000 participantes, estão o Hugo Batista, Tiago Pascoal, Filipe Clérigo, Paulo Morgado e Miguel Madeira de Lisboa, e o José António Silva, Luis Martins e Hugo Ribeiro do Porto.

Passando pelo "booth" de Ask The Experts de Arquitectura, encontrei o Zé Tó, que é uma das pessoas por trás do concurso Iron Architect deste ano, numa animada conversa com o Ron Jacobs e o Paulo Morgado, essencialmente sobre a utilização de interfaces de serviços do tipo:

messageResponse Execute(messageRequest arg) {...}

Para o Ron um Anti-Pattern SOA, para o Zé Tó um padrão muito interessante em cenários como routing/brokering, e também com claras vantagens em termos de gestão de plataforma (pela redução na quantidade de serviços). O Ron vai fazer a sessão de anti-patterns soa, quero ver se inclui os resultados desta conversa. J

ARC207 - Introduction to Agile Methodologies and Concepts (Roy Osherove)

O Roy Osherove é uma das blog-sonalidades presentes no TechEd, para fazer sessões relacionadas com metodologias ágeis. A apresentação que fez foi uma sessão muito introdutória a metodologias ágeis, com algum foco em Scrum e eXtreme Programming. Grande parte do tempo foi passado a motivar para a utilização destas abordagens, sendo a capacidade de reagir à mudança o aspecto chave. Outros aspectos críticos são a comunicação entre os intervenientes do projecto, e a capacidade de produzir valor para o cliente rapidamente, com releases frequentes e incrementais. Em alternativa, referiu, as metodologias tradicionais tentam "prever o futuro", fechá-lo em documentos Word, requisitos, âmbitos controlados, etc.

Foi brevemente apresentado o Agile Manifesto, e este vídeo como uma boa analogia das metodologias ágeis: parece confuso, contra-intuitivo, mas que funciona surpreendentemente bem! Seria mais eficiente, se fosse cumprido o código da estrada? Há aqui assunto para discussão.

Uma parte interessante foi o contraste Scrum vs XP, com identificação daquilo que o XP tem que não está no Scrum (ver os slides, abaixo), tais como o pair programming, e que pode ser incorporado na primeira.

Acho que a mensagem essencial, e o Roy apresentou esta sessão evitando tudo o que é o aspecto religião frequentemente associado à defesa destas metodologias, é que destas metodologias devemos adoptar aquilo que achamos relevante no nosso contexto: a postura do cliente, as características da equipa, o projecto, etc.
O soundbyte: "The essential is adopting what works for you, the goal is make things better. If your current method works well, leave it alone, keep using it".

Pessoalmente, acho que este tipo de metodologias são muito interessantes (gosto especialmente de Scrum), e acho que em muitas situações é um caminho que se deve pelo menos experimentar.

Nota: aqui estão os slides da pre-conf que o Roy fez ontem. A sessão ARC207 foi a primeira da pre-conf.

DEV312 - BizTalk Server 2006 – Design for Performance (Lee Graber)

A primeira sessão de BizTalk, com uma apresentação por um Dev Lead do BizTalk (autor do blog BizTalk Core Engine), dedicada ao tema de desempenho. Já conhecia a maioria destes conteúdos, que percorreu inúmeras boas práticas a seguir em termos de messaging (ex: não usar elementos xml com nomes grandes, não usar a Xml Pipeline no envio a menos que se pretendam demover propriedades, colocar mapas nos receive ports e não nas orquestrações, etc.) e orquestrações (não assumir que o parallel é multi-threaded, inicializar correlation sets no envio e não na recepção de mensagens, etc.), considerações sobre tunning, a penalização decorrente da persistência e as situações em que a mesma acontece, efeitos de ter várias message boxes, e vários outros aspectos. Em tudo o que tem a ver com desempenho, um aspecto a salientar é sempre a necessidade de testar e medir.

Uma dica que vai estar em breve no blog dele é a de que se executem os seguintes sp's nos SQL's que suportem o BizTalk:

exec sp_tableoption N'Spool', 'text in row', 'ON'
exec sp_tableoption N'Parts', 'text in row', 'ON'

Aparentemente tem um efeito significativo (10-15%) no desempenho ao nível da Message Box.

No final houve várias questões, uma delas sobre a inclusão do Windows Workflow no BizTalk. O Lee explicou a história e origem do WF, quando ainda era WinOE, e comentou que na versão do BizTalk pós-R2 o motor de orquestrações vai ser efectivamente substituído, e que já não existem pessoas da equipa de produto a fazer desenvolvimentos no mesmo.

Uma boa sessão, e tem sempre piada ouvir os comentários "off-record" sobre o que acontece "lá dentro". Adicionalmente, nunca tinha estado numa sessão de BizTalk com tanta gente. Talvez uma demonstração da crescente adopção da tecnologia.

O soundbyte da sessão: "The SQL Agent is our Garbage Collector".

KEY001 – Launch: Windows Vista, the 2007 Office System and AJAX (Eric Rudder)

Primeira sessão oficial do evento, a keynote do Eric Rudder servia para fazer o lançamento dos produtos que indico no título (com excepção do Vista). A sessão foi fraca e pouco dinâmica, algo dirigida para a imprensa (como costumam ser), e muito timidamente anunciando os RTM's do Office 2006 ("yesterday at 6pm"), .Net 3.0, e Ajax for Asp.Net. Os produtos estão terminados, e estarão disponíveis na MSDN até ao final do mês.

Ponto interessante da sessão foi a demo do Eric Lee, percorrendo o Office 2007, Vista, WPF, Workflow, WCF, Ajax. Muito mostrar a funcionar e sem mostrar a fazer. Mesmo a terminar entrou o Anders Hajlsberg para uma demo final de Linq. O Anders é muito convincente, e apesar de a demo não ter tido nada a mais do que teve o ano passado no PDC05, não deixou de ser extremamente interessante, e a tecnologia é muito promissora. Ponto alto.

Monday, November 6, 2006

TechEd 2006: Introduction to Software Architecture (Sessões 3 e 4)

As outras duas sessões da pre-conference foram sobre Essencials of Architectural Analysis, e sobre reviews a Arquitecturas. A primeira, com o Ron, foi mais uma vez muito leve, ilustrada com alguns dos vídeos disponíveis no site dele, focada em questões como a identificação de requisitos e a sua importância. Apresentou uma tabela interessante com dados de projectos da NASA, relacionando o tempo despendido a recolher requisitos com o aumento de custos em projectos, face ao esperado: com menos de 5% do orçamento do projecto alocado aos requisitos, resultam excessos de custo de 125%. Com mais de 10%, apenas excessos de 30%. Falou ainda de patterns, e talvez o vídeo mais interessante que mostrou, apesar de curto, foi com um "city planner" de Seattle, que em poucos minutos, ao falar do planeamento de cidades (algo tipo os PDM's), usou palavras como "patterns", "frameworks", "master plan", e outras que ressoam no domínio da arquitectura de software.

A segunda sessão foi quase toda dedicada ao standard ISO 9126, sobre qualidade de software, percorrendo os vários aspectos do mesmo e terminando a analisar o iPod. Não foi uma sessão muito interessante, apesar do Scott ser um bom speaker.

A pre-conf está a acabar, com perguntas e respostas, e as primeiras foram precisamente sobre um tema que já discuti no passado: qual é o papel do arquitecto numa metodologia ágil como o Scrum? O Scott, um agilista convicto, faz tanto arquitectura como design (curioso como fez esta distinção), o que lhe dá espaço para estar em todos os projectos e dar globalmente indicações sobre o caminho a seguir. O Ron acrescentou que, em projectos ágeis bem sucedidos, o Arquitecto tende a ser alguém que é o dono da Visão arquitectural do projecto. Para ambos é indiscutível que tem de existir espaço para este papel, em contraste com a visão orgânica (e romântica) em que do trabalho independente de developers a trabalhar em equipa sai um edifício como o pretendido pelo cliente.

Globalmente, a pre-conf não foi tão satisfatória como poderia ter sido (parece que há uma certa tendência para haver demasiado teoria nestas sessões, quase todas de nível 200), pessoalmente interessa-me também ter a visão prática, especificidades dos projectos, trocas de experiências. Como acontece no GASP, aliás. Neste aspecto, a lição que me pareceu mais interessante, passada pelo Scott, foi a necessidade de recolher métricas, medir, testar automaticamente. Porque "anecdotes", historietas, experiências de projectos passados, não são o suficiente.

Outros comentários finais do Scott: diz que não lhe agrada particularmente o UML, e que o único diagrama (na experiência dele) que o cliente consegue compreender são os Sequence Diagrams, que fazem para cada Use Case dos projectos que desenvolvem (pessoalmente também tenho boas experiências com Statechart diagrams).

Quanto à tuga-team, já chegou também o Zé Tó, almoçámos todos o Jan Tielens, e à noite tenho o jantar de MVPs com o Paulo Morgado. Uma curiosidade interessante é que há mais participantes portugueses que espanhois no TechEd (!!).

TechEd 2006: Introduction to Software Architecture (Sessões 1 e 2)

A primeira sessão da pre-conf foi muito "alto nível", com o Ron Jacobs a identificar três funções que considera chave num arquitecto: a faceta de explorador/visionário, o aspecto de "advocate", que se preocupa com o cliente e o problema (sendo este o aspecto que me parece menos interessante em termos de analogia, uma vez que um advogado é alguém que pode defender causas que sabe serem do culpado), e finalmente o aspecto que mais tradicionalmente se pode associar à função de um arquitecto, a concepção/desenho de uma solução.
Foi uma sessão vaga e algo superficial, mas também com carácter introdutório.

A segunda sessão, com o Scott Hanselman, foi mais interessante. O título era "Essencial Abilities of a sw architect", e focou em aspectos como preocupações com segurança, disponibilidade, e desempenho. Três preocupações genéricas, mas tb muito fundamentadas no tipo de trabalho desempenhado pelo Scott, em sistemas com frontends web. Aproveitou para "vender" aspectos que já apresentou tb em podcasts, como sejam os testes unitários, integração contínua, e scrum. Um aspecto particularmente saliente, em qualquer das três dimensões, tem a ver com a possibilidade de tirar medidas não equívocas, de forma automática, que possam ser comparadas com uma "baseline", e assim avaliadas.
Uma dos inúmeros sound-bytes que disse foi "A quantidade de artefactos não-software num sistema deve tender para zero." O exemplo? Um documento Word que diz que o tempo de carregamento de uma página deve ser inferior a 2 segundos deve ser substituído por um teste automático que verique essa condição.
Uma sessão interessante, com um speaker muito eloquente.

 

TechEd 2006: Introduction to Software Architecture (Pre-Conference)

Começo as sessões deste ano na Pre-Conf de Arquitectura, com o Ron Jacobs e o Scott Hanselman a falar de arquitectura. O primeiro conhecido pelo Arccast, o segundo pelos Hanselminutes.

O grupo de "tuga" já inclui com o Pedro Rosa da MS, Tiago Pascoal e Bruno Câmara da Agilior, Paulo Morgado (MVP C#), e eu. Durante o resto do do dia deve chegar o resto do "contigente" de cerca de 60 pessoas. A t-shirt patrocinada pela MS PT, inclui, além do logo da conferência e a Microsoft, o logotipo do GASP. :-)
Por cá há também uma banca da IASA, com quem vou falar amanhã.

Wednesday, October 25, 2006

Performance: BizTalk 2004 vs 2006 com Sql Server 2000 vs 2005

Isto já apareceu referido noutros blogs, mas não posso deixar de referir aqui: foi publicado um estudo a comparar o desempenho do BizTalk com 3 tipos de infraestrutura: BizTalk 2004 com Sql 2000 SP3, BizTalk 2006 com Sql 2000 SP4, e BizTalk 2006 com Sql 2005. Os resultados, para todos os cenários avaliados, mostram uma clara superioridade da última configuração, em alguns casos com uma diferença surpreendente.

Este estudo não apresenta os motivos para as diferenças de desempenho, só os tempos e quantidades de mensagens globais, mas não deixa de ser um argumento muito forte para motivar a selecção das versões mais recentes, ou o upgrade para as mesmas.

Aproveito para recomendar que se façam upgrades para o Sql Server 2005 SP1, e para o COM+ 1.5 Hotfix Rollup Package 9, se ainda não os têm, cada um deles com benefícios nesta área.

Tuesday, October 17, 2006

Create It: 5 anos

Há 5 anos atrás nesta data, eu e alguns amigos e colegas criámos a empresa que hoje é a |create|it|. Com vontade de fazer melhor, de prestar serviços com Qualidade, de ser capaz de dizer que queremos ser [d]os melhores, aliar a Experiência em projectos e tecnologias a uma grande Agilidade e proximidade na gestão de projectos e da equipa, de ter uma busca constante da Inovação e de chegar primeiro. Ainda há muito caminho pela frente, arestas a limar, e o constante desafio do crescimento, mas até agora a batalha está ganha e estamos onde queremos estar.

Em termos tecnológicos, a decisão fundamental foi a aposta a 100% em plataformas Microsoft, e por aí passam e já passaram produtos e tecnologias como o .Net/C# assumida desde a primeira hora, o SharePoint 2001, as primeiras instalações nacionais em produção de produtos como o SharePoint Portal Server 2003 ou do actual SharePoint Server 2007, a aposta ganha no BizTalk Server, desde a "ingénua" versão 2000/2002 até ao actual 2006, ao Identity Integration Server, e vários outros. A aposta na inovação foi também ganha pela participação em eventos, por formações leccionadas em BizTalk Server 2006 ou mais recentemente no Office 2007, e pela participação na génese do GASP - Grupo de Arquitectura de Software Português, que veio abrir espaço a uma comunidade na área da Arquitectura de Software.

Finalmente, aproveito este post para anunciar o |blog|it|, a novíssima plataforma de weblogs dos colaboradores da empresa, onde passarão a estar disponíveis não apenas os blogs que já existem (o meu e o do Raúl), como os de outras pessoas que têm interesse em partilhar o que aprendem. O Url é http://blogit.create.pt .

Parabéns |create|it| ! :-)

Friday, October 13, 2006

BizTalk 2004/2006: Not all Delay Shapes are created the same

While doing a simple copy&paste of a Delay shape to the outside of a Listen block, I noticed a slight difference between the use of delay shapes inside and ouside Listen's. Here's the Delay shape ouside any other encompasing shape:


Notice the example message: "Delay for one day". Below is a screenshot of a Delay shape inside a Listen shape:


Notice the example message: "Time out after one day".


Now, it's actually nice that the text message changes. What is not nice is the missing semi-column in this second variant! I don't know if this is intentional or not, but it happens both in BizTalk 2004 and 2006, and you get a compilation error if the usage is not as referenced: no semi-column in the Listen shape, with a semi-column outside it.


Any hints on the reason for the difference?


[Cross-Posted de http://www.arquitecturadesoftware.org/blogs/joaomartins]

Monday, October 9, 2006

SharePoint 2007: Atribuir tarefas a grupos de utilizadores

Outra questão que se levantou na formação de Office 2007, e especificamente na componente SharePoint, foi relativa à possibilidade de atribuir Tasks na Task List a grupos de utilizadores, e não a utilizadores individuais. A resposta à pergunta é Sim, e tanto no relativo a SharePoint Groups como a grupos de utilizadores na AD.

Existem no entanto alguns pormenores a referir: quando se entra na lista de Tasks do SharePoint, por omissão a vista seleccionada é a "My Tasks", e esta não lista as tarefas atribuídas ao utilizador via os grupos a que pertence. Se mudarmos para a vista "By My Groups", já são visíveis as tarefas atribuídas a grupos, mas apenas os grupos SharePoint de que o utilizador actual é membro, e não os grupos na AD.

Já em relação a workflows o comportamento é o desejável. Verifiquei o Approval, com os dois tipos de grupos, e ambos funcionaram bem, entregando as tarefas em sequência ou paralelo a todos os utilizadores do grupo em causa.

[Nota: os testes foram feitos com o beta2]


[Cross-Posted de http://www.arquitecturadesoftware.org/blogs/joaomartins]

Sunday, October 8, 2006

BizTalk 2004 SP1 – Pipeline component “Properties validation failed. The document schema does not exist.”

There is an issue in BizTalk Server 2004 SP1 that came up while configuring a flat-file disassembler pipeline component with a given document schema. The problem is as follows.

The solution configuration includes three different BizTalk projects: one project containing a flat-file document schema, a second project containing a property schema that is referenced by the first project/schema, and a third project with a receive pipeline. Both the Document Schema and Pipeline projects reference the Property Schema project. The problem is that, with this configuration, I cannot reference/use my document schema in the FFDasm pipeline component: it is not selectable in the Document Schema's combobox, and I get a compilation error such as this:

S:\mypath\ReceiveDelimited.btp Component 'Flat file disassembler' properties validation failed. The document schema "[Fully qualified name of my document schema assembly]" does not exist.

After struggling with this issue for some time, I opened a support case with Microsoft and very quickly got a reply: apparently this is a "limitation" of the product, which does not support this kind of scenario. The issue was solved in VS2005/BizTalk 2006, and to work around it in 2004 Sp1 there are several solutions: a) put the assembly with the property schema in the GAC; b) move the property schema to one of the other two projects; or c) remove the reference to the property schema in the document schema, configure the pipeline component with the document schema, add again the reference to the property schema to the document schema, build and ignore the warning [Note: I can't be sure, but I seem to remember that I got a compilation error, not a warning, so this last alternative may not work].


[Cross-Posted de http://www.arquitecturadesoftware.org/blogs/joaomartins]

Tuesday, October 3, 2006

Workflows com Visual Studio e InfoPath no MOSS2007

Como referi no post anterior, o exercício de Workflow realizado no curso de Office 2007 (uma actualização do capítulo do livro "7 Development Projects for MOSS2007 and WSS") foi algo complexo, e o laboratório não incluía detalhe suficiente sobre cada passo realizado.

Para quem tiver interesse em começar a explorar o tema de Workflows em SharePoint, tem no blog do Nick Swan uma explicação passo-a-passo de um workflow com VS2005 e formulários InfoPath 2007, tanto dos vários passos como do que é necessário para fazer o deployment. O exemplo não é o mesmo do curso, apesar de muito semelhante, mas antes uma explicação detalhada do "How To" que é incluído no SDK do MOSS 2007 (SDK > Managing Enterprise Document Content > Workflows in Office SharePoint Server 2007). Este exemplo funciona bem com a beta 2 do MOSS 2007.

Algumas notas gerais que podem facilitar a sua realização:

  • Para fazer debug ao Workflow no VS2005, é necessário fazer Attach ao w3wp (Managed Code);
  • No string Install.Bat que instala a Feature e o Workflow, e que é criado automaticamente quando se cria o projecto no Visual Studio, trocar as 2 linhas que fazem o Deactivate e Uninstall da Feature para o topo. Depois de os formulários InfoPath estarem feitos e testados, comentar as duas linhas que fazem essa verificação;
  • Caso apenas se altere o código do workflow, não é necessário reinstalar a feature, basta colocar no Gac a nova versão e fazer IISRESET;
  • Um dos aspectos interessantes do exemplo é que usa o primeiro formulário tanto para na Associação como na Iniciação do workflow, o que é especificado no Workflow.Xml . O mesmo pode ser feito na criação de Tasks, mas neste caso pode não ser obrigatório repetir a associação, bastando atribuir o mesmo "Task Type" às tarefas criadas e fazer a associação uma única vez.
  • Quando se faz o Publish de um formulário IP, deve usar-se o mesmo nome que aparece nas properties (quando se vai copiar o URN).
  • O ficheiro com a Secondary Data Source, o ItemMetadata.xml, tem de ter este nome, e é case sensitive. Notar que o exemplo do Nick Swan está incorrecto neste ponto (ou antes, os screenshots estão bem, a descrição textual incorrecta). Este ponto está referido na documentação do MOSS, mas é fácil deixar passar. Se não tiver este nome, a passagem de valores para o 2º formulário não funciona.

Para quem vai começar nisto, recomendo ainda o download do ECM Starter Kit for 2007 Office System , que além das templates de projecto para o Studio tem vários exemplos de workflow sobre
MOSS.

Fazer workflows para MOSS tem a sua complexidade, que suponho vá diminuir à medida que a tecnologia ganhe maturidade, mas o potencial – já hoje – é muito grande. Repleto de "Oportunidades para ISV's". :-)


[Cross-Posted de http://www.arquitecturadesoftware.org/blogs/joaomartins]

Monday, October 2, 2006

Formação Office 2007 for Developers: Wrap Up

Nas últimas duas semanas tive a oportunidade de voltar a dar formação, desta vez sobre Office 2007, na perspectiva de programadores, tanto relativos ao agora chamado Office Cliente (Outlook, Word, Excel, InfoPath, etc.), como sobre a componente servidor, com foco no SharePoint (Services e Server) mas também Forms Server e Excel Services. O contacto com 30 pessoas de diferentes empresas, permitiu-me perceber os diferentes interesses em cada uma das "features" do produto, e onde pretendem investir. Isto em adição ao gosto pessoal em dar formação, e ao conhecimento acrescido do panorama do IT em Portugal. :-)

A grande saliência, mesmo tendo o SharePoint em pano de fundo, vai para o Workflow. Foi o tema que mais interesse e antecipação criou (tal como aconteceu no seu lançamento no PDC05 o ano passado), apesar de – como se teve oportunidade de constatar – o desenvolvimento de Workflows sobre SharePoint, adicionalmente se usando formulários InfoPath, ter alguma complexidade técnica. Os exemplos e demonstrações que tivemos oportunidade a fazer foram apenas pontos de partida, e é essencial que venha a existir mais documentação.

Também a recolher algum interesse teve o desenvolvimento para Office Cliente, e refiro-me aqui principalmente ao desenvolvimento de Add-Ins, desenvolvidos sobre Visual Studio Tools for Office (o curso focou na CTP de Junho do VSTO "v3", mas o beta do VSTO 2005 Special Edition ficou disponível já durante o curso). Há soluções e possibilidades muito interessantes no modelo, e a integração com o "online", via SharePoint, pode ser uma grande mais valia. Um aspecto curioso de referir é que, ainda assim, o desenvolvimento de aplicações do tipo "Smart Client" continua a ter alguma resistência, possivelmente, devida aos últimos 10 anos em que nos habituámos a tudo ser baseado em Web. Para vários dos ISV's, no entanto, é o modelo que faz mais sentido para a sua área de negócio.

No cruzamento entre o cliente e o servidor estão as componentes baseadas na utilização de Forms Server em conjunto com o Outlook como cliente. A ideia de termos formulários ricos que são preenchidos num browser ou no próprio Outlook, e que podem ser trabalhados nos novos "Forms Folders" do Outlook e guardados num SharePoint (eventualmente associados a Workflows) levanta imensas possibilidades e oportunidades de negócio, talvez com saliência para o sector público e grandes organizações.

Outras áreas que foram bastante referidas incluiram a componente de Web Content Management (WCM), a utilização do MOSS 2007 como plataforma para desenvolver sites web públicos (o substituto do CMS2002), e o Enterprise Content Management (ECM), para aplicações de gestão de conteúdos, incluindo coisas como Records Management e Workflow. O programa do curso não incluía, no entanto, grandes desenvolvimentos nestas duas áreas.

Duas outras áreas particularmente referidas foram o Business Data Catalog (BDC) e os Excel Services. A primeira pode operar uma mini-revolução no mundo da Integração de Sistemas ao permitir expôr com relativa simplicidade, em sites SharePoint, informação que é armazenada em sistemas de negócio (desde que em Sql ou acessíveis por Web Services), sem obrigar a programação. Um cenário do tipo "case study" é a possibilidade de disponibilizar informação de sistemas como SAP num SharePoint, em que a consulta pode ser feita em web parts pré-disponibilizadas ou acessível meramente usando a pesquisa texto livre do MOSS. Se isto não deixa água na boca... :-) Para isto, e numa abordagem inicial, o que é necessário é apenas especificar uma camada de metadados a descrever a informação do sistema origem, e voilá.
A segunda, os Excel Services, não tanto pela realização de cálculos pesados no servidor ou pelas potencialidades em termos de Business Inteligence, mas pela possibilidade de invocar folhas de cálculo no servidor utilizando a camada de web services genéricos que é disponibilizada. E há coisas que são muito mais interessantes de fazer no Excel que programadas em C#. :-)

A quem esteve no curso: espero sinceramente que tenha valido a pena, e ver-vos noutras ocasiões! Nos próximos dias vou tentar colocar aqui respostas a perguntas mais frequentes ou informação sobre assuntos que tenham sido cobertos de forma menos aprofundada.

[Cross-Posted de http://www.arquitecturadesoftware.org/blogs/joaomartins]

Tuesday, September 19, 2006

VSTO 2005 SE Beta

Quem desenvolve para Office cliente, na versão 2003, conhece sem dúvida o VSTO 2005, as Visual Studio Tools for Office, que fazem com que o desenvolvimento para Office se pareça com desenvolvimento .Net. Este extra é interessante, uma vez que as interfaces e especificidades do COM em que a maior parte do Office cliente é baseado nem sempre são muito interessantes (como o facto de todos os add-ins partilharem o mesmo AppDomain).


Quem já começou a desenvolver para Office 2007, e quer beneficiar das potencialidades do VSTO e do novo interface utilizador do Office, usava até agora o VSTO "v3" - CTP de Junho. Estas tools têm agora uma nova versão, ainda em beta, a VSTO 2005 Special Edition (beta), que está sincronizada com o Office 2007 Beta 2 TR que acabou de sair. Esta versão desenvolve o que a v3 de Junho já incluía, como a programação para a Ribbon, desenvolvimento de (Managed) Add-in's e de Custom Task Panes.


Mais informações e download no site da MS ou no ServerSide.Net . É um admirável mundo novo. :-)


[Ps: o livro obrigatório para quem desenvolve com VSTO 2005 é o "Visual Studio Tools for Office: Using C# with Excel, Word, Outlook, and InfoPath", dos Eric's Carter & Lippert]


[Cross-Posted de http://www.arquitecturadesoftware.org/blogs/joaomartins]

Sunday, September 17, 2006

Quick Tip: Como desligar o BEEP em máquinas virtuais

Quando se usa quer o Virtual PC quer o Virtual Server,  e acontece um erro, o software gera um BEEP sonoro e desagradável, que tinha o hábito de desligar tirando o som do PC. Parece que afinal não sou só eu a ter esta queixa: existe um artigo da KB da Microsoft a dizer como desligar o som usando um de três métodos diferentes.

Aquele que produz resultados mais rapidamente é o seguinte:

C:\> net stop beep

[Cross-Posted de http://www.arquitecturadesoftware.org/blogs/joaomartins]

Saturday, September 16, 2006

WinImage

O WinImage é utilizado geralmente para extrair conteúdo de imagens ISO, sem obrigar a queimar um CD/DVD. A versão mais recente, 8.0, extende este tipo de funcionalidades a ficheiros VHD, ou seja, discos virtuais do Virtual PC ou Virtual Server: além de permitir extrair ficheiros de uma imagem (sem obrigar, portanto, a arrancar a máquina virtual), permite ainda injectar ficheiros numa VM.


Infelizmente, no entanto, esta última funcionalidade apenas é suportada para imagens FAT, e não para NTFS. :-(


Fica a meia recomendação.


[Cross-Posted de http://www.arquitecturadesoftware.org/blogs/joaomartins]

Quick Tip: Consolas Font

Nunca gostei de utilizar uma font como o Courier New para desenvolver, curiosamente uma font encomendada originalmente pela IBM na década de 50 para utilização em máquinas de escrever. Há talvez cerca de um ano troquei-a por uma Proggy Font, mas estas são pequenas demais para a resolução que utilizo.


Recentemente a Microsoft disponibilizou uma font mono-espaçada concebida para funcionar bem com ClearType em portáteis/LCD's, e especificamente para utilização em programação (até se autoinstala no Visual Studio). Um exemplo:

Consolas

O download está aqui.


[Cross-Posted de http://www.arquitecturadesoftware.org/blogs/joaomartins]

Thursday, September 14, 2006

TechEd Developers 2006 - Barcelona

Já faltam menos de dois meses para o TechEd, agora mesmo aqui ao lado em Barcelona. O ano passado foi a primeira vez que fui, e vi inúmeras sessões interessantes, desde BizTalk a Arquitectura, .Net 2.0, SQL 2005, etc. Este ano a agenda também promete, e vai ter apresentações de famosos como o Clemens Vasters, Scott "hanselminutes" Hanselman, Roy Osherove, David Chappell, Udi Dahan, Anders Hejlsberg, Ivar Jacobson, Beat Schwegler, Paul Andrew, Ted Pattison, Jan Tielens, Patrick Tisseghem, Ingo Rammer e Christian Weyer, Aaron Skonnard, Ron "Arccast" Jacobs ou Arvindra Sehmi.


Há uns 6 ou 7 anos atrás tive um professor que numa aula disse uma frase cara: "Nos dias de hoje, o ónus da empregabilidade está com a própria pessoa". É preciso dizer mais? :-)


No ano passado, muitos dos participantes tinham t-shirts alusivas à sua nacionalidade, e pessoalmente acharia piada se este ano fizessemos nós o mesmo. Se alguém estiver interessado em participar na ideia, diga-me qualquer coisa.


[Cross-Posted de http://www.arquitecturadesoftware.org/blogs/joaomartins]

Wednesday, September 13, 2006

BizTalk: novos whitepapers

Nos últimos dias têm saído alguns whitepapers muito interessantes sobre BizTalk, e que não posso deixar de referir:


BizTalk Server 2006 - Developer’s Troubleshooting Guide


133 páginas de informação, incluindo desde problemas genéricos, mapas, orquestrações, pipelines, schemas, profiling SQL, DTC, adaptadores, etc. Um clássico instantâneo, como se costuma dizer.


BizTalk Server 2004-2006 Comparative Adapter Study


Estudo a comparar o desempenho dos technology adapters do BizTalk, entre as versões 2004 e 2006. As melhorias na versão mais recente são claras, com destaque para o adaptador SMTP e nos adaptadores Ficheiro (UNC), HTTP, MQSeries e MSMQ para ficheiros de maiores dimensão.


Também foram disponibilizados dois documentos interessantes sobre BAM, talvez a funcionalidade mais sub-utilizada do BizTalk: BAM FAQ e Desenvolvimento com BAM (como fazer a instrumentação de aplicações nossas para o bus de eventos do BAM).


[Cross-Posted de http://www.arquitecturadesoftware.org/blogs/joaomartins]

Sunday, September 10, 2006

Usar XPath em Orquestrações

O Stephen Thomas tem um excelente post sobre a utilização de xpath para aceder a partes de mensagens em orquestrações, mas há questões que se levantam repetidamente e que talvez não fiquem explícitas naquele texto.

Supondo que temos uma mensagem com um determinado campo que promovemos como Distinguished Field:

- Se tentarmos aceder ao seu valor com "mensagem.campo", e o nó respectivo não existir na mensagem, o valor devolvido é null;

- Se usarmos uma expressão xpath com a função string (ex: xpath(mensagem,"string(/nome/@attribute)");), e o nó respectivo não existir, o valor devolvido é string.empty;

- Só podemos afectar o valor de Distinguished Fields dentro de Construct Shapes;

- Ao fazer a afectação de Distinguished Fields, o nó destino tem de existir na mensagem em causa, ou ocorre uma excepção. Isto sucede quer se se use a sintaxe mensagem.campo = valor;  quer usando o xpath().

Este último comportamento pode não ser o esperado, uma vez que a semelhança de sintaxe com o C# faz pensar numa simples afectação de um campo/propriedade de uma classe, mas pode acontecer sempre que o campo afectado não seja obrigatório no schema.

Um "truque" para contornar esta questão pode ser colocar nesses campos valores placeholder/dummy, para que depois as afectações funcionem, ou usando mapas ou aquando da própria instanciação da mensagem.

Nota final: caso não tenha já ficado claro, um Distinguished Field é apenas um alias para um xpath.

[Cross-Posted de http://www.arquitecturadesoftware.org/blogs/joaomartins]

Thursday, August 31, 2006

BizTalk Server and Code Generation

BizTalk Orchestrations are visual descriptions of processes, models of behaviour and interactions. These models are the basis for a code generation step, during which BizTalk converts the orchestrations into C#. The resulting C# files are then compiled, and afterwards deleted. The models/orchestrations themselves are text files you can open in Notepad, and this holds true for all the BizTalk-specific project files, such as Maps, Schemas or Pipelines.


I am a firm believer in automation and Code Generation, and these strategies have been very helpful in BizTalk projects, which is maybe not the most obvious candidate for the use of code generation.
Everything that is done twice, the saying goes, is worth scripting. :-) As to code generation itself, I resort to it as much as possible, being it based on Domain Specific models (such as BizTalk Orchestrations), or simple Template-based generation, using tools like the excelent CodeSmith.


Typical figures state that Code Generation can be used to produce up to 60-80% of a solution's code, especially in components such as the data access layer. What if we try to apply Code Generation to BizTalk? Here are some ideas.


- Project files: typically we do "Add > New Project > Empty BizTalk Project", select the target folder, later on configure the project with the key, fill in copyright configuration, etc. This can be quick, no doubt, but if you have a lot of projects, generation is definetly quicker, and the result is uniform. These project files can also include references to other projects or components you know you need.


- Sample schemas: if you know that each integration point demands, for example, 3 schemas (source schema, canonical schema, target schema), you can generate starting schemas for these messages. If you can know in advance some characteristics of the schemas (ex: xml vs delimited) you can take this in consideration, and also fill in the appropriate schema namespaces, and other attributes.


One step further would be to generate schemas, or at least initial versions of schemas, based on a meta-description stored, for example, in an Excel file. With only 4 columns: Field name, Field type, Max Occurs and Min Occurs, you can generate very interesting base implementations.


- Sample maps: in the example above, you could generate four map files between the different formats, empty but for the selection of the correct maps as target and destination.


Again, a more ambitious step would be to describe the maps themselves using Excel, even if only with direct links. One line of metadata such as:


"name, string, 1, 1, MyName, string, 1, 0"


Could result in 2 schemas, the first with a single element "name" of type xs:string and max/min occurs 1, the second with an element "MyName", string, maxoccurs 1, min occurs 0. Plus, you could generate 2 maps, mapping the values together, from the source to the target schema, and vice-versa.


- Sample orchestrations: apart from generating empty orchestration (.odx) files, you can also do stuff such as automatically add a Receive Shape with Activate=True at the top and Long Running transaccionality turned on, or simply include common code refering to other generated schemas and/or maps.


- Deploy scripts: especially when using BizTalk Server 2004, deploy/undeploy scripts are almost critical to automate operational tasks and aid in the development cycle. These can be easily generated in a scenario such as the ones described above.


 


In a recent project, and from a single input parameter (the name of the "Concept" being integrated), we generated combinations of all of the elements described above, in a total of about 25 files, with an obvious productivity gain. It's much easier to delete the excess than to create just the needed files from scratch.


If you have any other ideas for code generation over BizTalk, please let me know. :-)


[Cross-Posted de http://www.arquitecturadesoftware.org/blogs/joaomartins]

Monday, August 28, 2006

Mail merge a partir de uma lista de SharePoint

Alguma vez pensaram como seria interessante fazer mail merge no Word usando como base uma lista de SharePoint?


 


Se sim, e se já experimentaram, provavelmente chegaram à conclusão que não é possível, porque o Word nem sequer permite escolher uma lista de SharePoint como Data Source para o Merge.


Existem duas alternativas:


1)    exportar a lista para Excel e usar o Excel como data source; ou


2)    criar uma base de dados Access e fazer uma linked table para a lista de SharePoint , usando esse Access como data source.


 


A primeira é chata porque obriga a fazer sempre a exportação para Excel (ou a abrir o Excel e fazer refresh dos dados) antes do mail merge.


A segunda não funciona porque o Word diz que a data source não possui tabelas visíveis.


 


No entanto, podemos fazer a segunda alternativa funcionar através dos seguintes passos:


1)    Ele mostra o erro: The data source contains no visible tables. Pressionamos OK.


2)    Ele mostra a mensagem: Could not find ‘C:\Contactos.mdb’. Pressionamos OK.


3)    Aparece uma janela de login para a ligação à BD Access. Pressionamos o botão Database...


4)    Aparece uma janela para selecção do ficheiro MDB. Seleccionamos o ficheiro Access e pressionamos OK.


5)    Volta ao ecrã de login. Pressionamos OK.


6)    Aparece uma janela para seleccionar a tabela de onde queremos importar a informação para o merge. No entanto não aparece nenhuma tabela. Pressionamos o botão Options...


7)    Aparece uma caixa de opções. Activamos a opção Synonims e pressionamos OK.


8)    Aparece a dita tabela na lista de tabelas da BD :-D


9)    Daqui para a frente segue-se o processo normal.


 


Estes passos foram realizados em Word 2007, mas este procedimento deve ser semelhante em Word 2003 e SharePoint 2003 (já que foi descrito com resposta a um pedido de ajuda referente à versão 2003).


 


André Vala

?>

Friday, August 25, 2006

Criar temas para o SharePoint 2007 com o SharePoint Designer 2007

Os temas, em Sharepoint 2007, permitem mudar o aspecto gráfico de um site com uma só acção. Ou seja, tudo o que seja cores e imagens é manipulado pelo tema associado ao site.


Isto significa, porém, que um tema não tem qualquer influência no layout das páginas.


 


NOTA: as descrições seguintes referem-se apenas à versão Beta 2.


 


Instalação de um Tema


 


O tema é uma pasta composta por ficheiros CSS, um ficheiro INF e vários ficheiros de imagem (GIF, JPG...). A instalação de um tema compreende dois passos:


1) colocar a pasta em C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\THEMES


2) alterar o ficheiro C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\1033\SPTHEMES.XML acrescentando uma entrada para o novo tema:


 


<Templates>


            <TemplateID>MyTheme</TemplateID>


            <DisplayName>My Theme</DisplayName>


            <Description>O My Theme tem um fundo branco com áreas de controlo vermelhas e highlights amarelos</Description>


            <Thumbnail>images\MyTheme.png</Thumbnail>


            <Preview>images\MyTheme.gif</Preview>


</Templates>


 


O TemplateID corresponde ao nome da pasta do tema.


O DisplayName é o nome que aparece na listas dos temas, na página de selecção, no Sharepoint.


O Description é a descrição que aparece associada ao tema, nessa mesma página, no Sharepoint.


O Thumbnail e Preview são as imagens de exemplo usadas, na página de selecção de tema do site Sharepoint, para mostrar o look final.


 


Ao fazer estas alterações, o tema fica imediatamente disponível no SharePoint, sem necessidade de reiniciar o IIS.


 


Edição de um Tema


 


Depois de aplicado um tema a um site, alterar as CSS ou as imagens na pasta dos temas não surtirá qualquer efeito nesse site.


Mesmo que se aplique um Tema B ao site, alterando em seguida a CSS do Tema A, para depois o voltar a aplicar... o site ficará com o aspecto do Tema A inicial.


 


Explicação: ao editar o site com Sharepoint Designer 2007, podemos constatar que, ao aplicar um determinado tema, o Sharepoint faz um merge de todas as CSS do tema e copia tudo para a pasta (virtual) _themes dentro do site. Nessa pasta passam a estar todos os CSS, imagens e o ficheiro INF, e um novo ficheiro CSS (por exemplo CAP1011-65001.CSS) que é o ficheiro realmente utilizado pelo Sharepoint. O nome do ficheiro é criado com base no nome do tema (CAP, no exemplo) e a codepage (65001, no exemplo) que está definida no ficheiro INF do tema.


 


Portanto, para editar o tema e ver as implicações das alterações, deve ser alterado este ficheiro no SharePoint Designer.


As classes (estilos) que não forem redefinidos ficarão com as definições do tema original do SharePoint.


 


André Vala

?>

Friday, July 21, 2006

GASP - Primeiro aniversário!

O GASP – Grupo de Arquitectura de Software Português, foi criado há um ano, em Julho de 2005 em Lisboa e finais de 2005 no Porto, com o objectivo de permitir a troca de ideias em volta de temas relacionados com a arquitectura de software.


Desde o início apoiado pela Microsoft Portugal, apesar de technology agnostic, reúne um conjunto de profissionais de diversas áreas e com variadas experiências e focos profissionais.  O grupo tem reuniões mensais à volta de uma “távola redonda”, nas duas cidades, sendo a interactividade um factor essencial. Já foram apresentado e discutidos temas como Software Factories, Domain Specific Languages, Metodologias/Práticas Ágeis (Scrum e TDD), Geração de Código, Padrões de Desenho, Workflow, Software as a Service, Service Oriented Architectures, Frameworks,  sistemas de manufactura de circuitos, modelos de evolução de produtos, entre outros. Recentemente experimentou-se com o formato “Design Lab”, uma workshop prática com o objectivo de resolver um problema de arquitectura proposto, com resultados muito interessantes.


Passado um ano, o grupo tem um site (www.arquitecturadesoftware.org) com blogs e fóruns de discussão, e já teve a participação de convidados como Beat Schwegler (Microsoft EMEA), Peter Himschoot (U2U) e Paul Preiss (Presidente da IASA, de que o GASP é o chapter português, um dos mais activos dos 60 à volta do mundo), este último animando uma viva discussão sobre o papel da Arquitectura de Software e de uma organização como a IASA na criação da profissão do Arquitecto de Software.


Um dos desafios do modelo actual – e que se tem discutido aturadamente - é a restrição logística à participação de mais pessoas, pelo que se têm procurado encontrar formas alternativas de permitir uma participação e interacção mais alargada. Esta pode vir a passar tanto por web casts, tendo uma “emissão experimental” sido testada com sucesso no início desta semana, como por eventos em espaços maiores e com mais pessoas, dos quais queremos organizar o primeiro ainda este ano.


Até lá, queria convidar-vos a trocar ideias nos fóruns do site, a dar ideias  tanto sobre outras formas de reunir mais gente interessada em torno do tema, como de permitir uma participação mais alargada, ou de assuntos que possam ser interessantes discutir.





A terminar com algumas notas pessoais (backstage stuff): a ideia do grupo apareceu depois de ter assistido com o Tiago Pascoal à apresentação do Juval Lowy ao Dutch .Net User Group, na véspera do arranque do TechEd 2005 em Amsterdão. Neste conheci o Hugo “SOA” Batista, e os 3 propusemos a ideia à Microsoft, que juntou outras “like minds” e a ideia teve asas.


À partida, como disse acima, o objectivo sempre foi muito simplesmente o de trocar e discutir ideias, deixando um pouco de lado questões específicas de tecnologia, e este aspecto tem sido absolutamente chave.  Outros dois aspectos muito valiosos têm sido o conhecimento do mercado, e muito especialmente os contactos com pessoas que andam por aí a fazer coisas muito interessantes, e a quem sei poder telefonar se quiser discutir algum assunto (e alguns nomes que posso referir são o do Filipe Clérigo da Viatecla, ou os professores Paulo Sousa do ISEP e Luis Falcão do ISEL, entre outros). Curiosamente, apesar de todos estarmos em empresas concorrentes, este não tem sido um factor limitativo. Quanto ao apoio logístico-organizativo, o Nuno Costa e o José António Silva da Microsoft têm sido inexcedíveis.


That’s it for now! Outro post destes daqui a um ano, no segundo aniversário, esperamos poder contribuir ainda mais para a comunidade nestes próximos 12 meses do que nos 12 que passaram. :-)

[Cross-Posted de http://www.arquitecturadesoftware.org/blogs/joaomartins]

Saturday, July 15, 2006

Arquitectura Ágil

A primeira vez que li sobre formas ágeis de fazer desenho/concepção de sistemas foi numa entrevista ao Martin Fowler (parte 1, 2, 3 e 4), em que ele diz o seguinte:


«I distinguish between planned and evolutionary design. Planned design says that when you think about a piece of software, you create the design first, then you code it. A planned design could take the form of UML diagrams. Or you could express it in terms of dividing a system into subsystems and defining the interfaces between those subsystems. With planned design, there's a definite switch between the two modes of creating the design and then coding it. And those tasks may often be performed by different people. Architects come up with design. The developer then code it. The design is not necessarily considered completely fixed, but it is considered mostly fixed. You can argue that the better the design, the less it will change as you code it.


With evolutionary design, you expect the design to evolve slowly over the course of the programming exercise. There's no design at the beginning. You begin by coding a small amount of functionality, adding more functionality, and letting the design shift and shape.


[...]


I think there's still room for some upfront design, but not a lot. People like Kent Beck and Ron Jeffries say it is eliminated. In a way they are right; you could build even a complex system purely through evolutionary design. But there are cases where you'll go faster with some upfront design. So I would disagree with the idea that you don't put your database in before you evolve your need for a database. I would make an initial decision about the presence of a database and go from there, but I would still evolve most of the design.»


Esta posição, já de 2002, exprime uma separação que parece haver entre metodologias ágeis e a arquitectura de software, se entendida como algo que se faz antes de se desenvolver um sistema. Pessoalmente, parece-me uma visão algo ortodoxa, e simultaneamente muito optimista. Não tenho nada contra a evolução e iteração, pelo contrário, mas considero essencial haver uma linha condutora.


No Channel 9 há duas entrevistas que também abordam este assunto. A primeira é com Colin Bird, CTO da Conchango, e outra com Roy Osherove, autor do blog ISerializable.com. Ambos dizem essencialmente o mesmo, que é sempre necessário ter uma arquitectura, e que esta vai também evoluir.


Diz o Colin: «The challenge of Agile Architecture is how deep you go, how soon. [...] You can't have no idea where you are going, you need a direction, a vision, and the vision of the architecture will evolve. [...] What you get with agile is an evolving architecture, a process of refactoring not just at the code level, but a rewrite of the architecture as you understand the problem space better, as the business changes.»


E diz o Roy: «Agile doesn't say "don't do design for the future", but do enough design so that when changes happen, you are able to handle them. [...] Architecture is a good thing. But doing one year of architecture before development is not good. [...] Design upfront is not bad, you just have to know when to stop. A good skeleton is enough.»


As opinião são semelhantes, e bem menos "ortodoxas" que a do Martin Fowler. Aquilo que me parece que fica a faltar, no entanto, é como introduzir esse elemento de concepção em metodologias ágeis tipo Scrum. Outras pessoas da Conchango estiveram no Architecture Insight 2006 da Microsoft no País de Gales, e fizeram uma apresentação sobre este tema. Infelizmente, não me parece que esta tenha informação suficiente a detalhar como é que a tal visão e arquitectura são construídas, sendo antes muito vaga. Há um arquitecto na equipa de cada Sprint do Scrum? Fica claro que tem de haver uma arquitecura, que esta tem de ser "minimalista", capaz de evoluir, e apenas a necessária e suficiente, mas não como é que isto se enquadra no espírito das metodologias ágeis.


Uma questão que se me coloca relativamente ao ponto específico da capacidade de evoluir, é se isso não passa apenas por recorrer a princípios/padrões como Loose Coupling ou Dependency Injection, que já são regra geral considerados boas práticas, seja a metodologia ágil ou não.


Quanto à granularidade a que se deve ir no desenho, infelizmente não há respostas. O Colin diz «It depends.», para mais à frente referir que esta pode incluir Diagramas de Classes, artefactos que tipicamente seriam produzidos já em sprints.


Não me parece que haja respostas claras nesta questão, mas certamente que voltarei ao assunto. Afinal, "IT have been the bad guys for a while, it's time to change that.", e estas metodologias podem claramente ajudar.


[Cross-Posted de http://www.arquitecturadesoftware.org/blogs/joaomartins]

Arquitectura

Em qualquer discussão de Arquitectura de Software ou de tópicos como gestão de projecto são frequentes as analogias com Arquitectura no seu sentido "tradicional", quer reforçadas quer negadas. Não pretendo tentar definir Arquitectura de Software (isso pode ficar para outro post), mas é interessante ver como é que se define arquitectura "tradicional":


Segundo a wikipedia em português, "A arquitectura é a arte ou técnica de projetar e edificar o ambiente habitado pelo ser humano. Quando se fala em arquitectura fala-se, entre muitas outras coisas, da organização do espaço. A arquitetura como atividade humana existe desde que o homem passou a se abrigar das intempéries. Uma definição mais precisa da área envolve todo o design do ambiente construído pelo homem, o que engloba desde o desenho de mobiliário (desenho industrial) até o desenho da paisagem (paisagismo) e da cidade (urbanismo), passando pelo desenho de construções (considerada a atividade mais comum dos arquitetos), como prédios, casas, igrejas, etc. O trabalho do arquiteto envolve, portanto, toda a escala da vida do homem, desde a manual até a urbana."


Para a wikipedia em inglês, "Architecture is the art and science of designing buildings and structures.


A wider definition would include within its scope the design of the total built environment, from the macrolevel of town planning, urban design, and landscape architecture to the microlevel of creating furniture. Architectural design usually must address both feasibility and cost for the builder, as well as function and aesthetics for the user.


In modern usage, architecture is the art and discipline of creating an actual, or inferring an implied or apparent plan of any complex object or system. The term can be used to connote the implied architecture of abstract things such as music or mathematics, the apparent architecture of natural things, such as geological formations or the structure of biological cells, or explicitly planned architectures of human-made things such as software, computers, enterprises, and databases, in addition to buildings. In every usage, an architecture may be seen as a subjective mapping from a human perspective (that of the user in the case of abstract or physical artifacts) to the elements or components of some kind of structure or system, which preserves the relationships among the elements or components."


Mesmo que a realidade seja diferente, e parecendo-me óbvio que a Arquitectura e a Arquitectura de Software têm graus de maturidade completamente diferentes, há alguns paralelos muitos óbvios entre as duas disciplinas (artes?). Os diferentes âmbitos, a escala, as preocupações/requisitos, entre outros. A matéria-prima, no entanto, é muito diferente.


Numa das próximas reuniões do GASP planeamos trocar ideias com alguns destes Arquitectos (hesito em chamar-lhes "tradicionais"...), para perceber afinal de contas até que ponto é vão as semelhanças.


Na página em português da wikipedia está uma citação de Goethe muito interessante: "A arquitectura é musica petrificada." Poderemos dizer o mesmo do que fazemos?


[Cross-Posted de http://www.arquitecturadesoftware.org/blogs/joaomartins]

Tuesday, July 11, 2006

BizTalk Mapper: Reverse Map's Links Direction

In data sincronization or entity integration scenarios developed using BizTalk Server, there are frequently situations where bi-directional maps have to be developed between two schemas: from A to B and from B to A. If these schemas are large and the maps complex, it can be quite tiresome to develop the two "symetric" maps, specially because of some usability limitations of the BizTalk Mapper in BizTalk Server 2004 (like the inability to copy&paste functoids and the time-consuming way parameters are set).


To help alleviate this problem, I developed a very simple tool that creates a reverse map from an existing one. All it does is replace the source and target schemas, and reverse the direction of all the links. I use it to produce B->A after I created A->B in the Mapper. You still have to manually check the result map and all the functoids, but at least most direct links should be correct.


The command-line tool was developed using VS2003/C#, and tested with BizTalk 2004 maps. I am not sure if the btm file format changed in BizTalk 2006, but even if it did, it should be very easy to adapt the tool to accomodate changes.


You can download the solution here. Hope it's helpful.


[Cross-Posted de http://www.arquitecturadesoftware.org/blogs/joaomartins]