Toda a gente que conhece minimamente a linguagem C++ já ouviu falar em templates. O conceito inovador de template foi oficialmente introduzido no standard de implementação em 1998 e trouxe uma lufada de ar fresco, tanto ao C++, como a um número de outras linguagens mais recentes (por exemplo, também linguagens como o Java ou C# foram enriquecidas com as suas próprias técnicas de programação genérica). Neste artigo, iremos rever os templates, bem como as suas propriedades, e explorar algumas das possibilidades raramente consideradas com templates.
Certamente muitos de vocês já tiveram necessidade de desenvolver algum tipo de aplicação para a Web e, como tal, devem ter investigado sobre plataformas que já dessem algum suporte ao desenvolvimento deste tipo de aplicações. Com uma rápida pesquisa no Google encontrámos um grande número de plataformas Web sobre as mais diversas tecnologias e, a quantidade e diversidade é tal, que se torna difícil saber qual plataforma escolher. Mas… este artigo não irá focar as plataformas Web existentes, mas sim sobre uma plataforma em particular, o Google Web Toolkit. O Google Web Toolkit foi desenvolvida pela Google (tal como o nome sugere), inicialmente com o objectivo de dar suporte aos seus engenheiros no desenvolvimento de aplicações Web. Posteriormente algum senhor da Google teve a amabilidade e a brilhante ideia de disponibilizar a plataforma para a comunidade em geral…
O cloud computing é uma das mais importantes tendências tecnológicas dos próximos tempos. Mas o que é afinal cloud computing? Não existe ainda uma definição clara, se quiser um exemplo disso faça esta pergunta a cinco pessoas ligadas à tecnologia e provavelmente irá obter cinco ou até mais respostas diferentes.
Existem opiniões que dizem que tudo o que está fora da firewall é cloud computing, ou seja, um simples webservice pode ser considerado cloud computing. Esta resposta até faz sentido porque na realidade o processamento desse webservice ocorre fora do nosso computador. No entanto, cloud computing é muito mais do que isso.
Essencialmente trata-se de afastar completamente a computação e os dados dos computadores de secretária e portáteis, e simplesmente mostrar ao utilizador os resultados da computação que ocorre numa localização centralizada (grandes datacenters) e é transmitida via internet para o ecrã do utilizador. Mais ainda, é potenciar a interacção entre o software, que neste paradigma reside na nuvem, através de serviços. Estaremos então a voltar à época dos terminais “estúpidos”? Iremos tentar perceber a resposta a esta pergunta mais à frente neste artigo, mas neste momento torna-se necessário perceber as mudanças que ocorreram no passado para perceber o porquê dessas mudanças no futuro.
O controlo de versões de um software sempre foi uma questão muito importante e delicada para qualquer programador que se preze. É actualmente impensável desenvolver projectos de software complexos e com requisitos que estão frequentemente a mudar, sem ter um sistema que controle tudo o que acontece ao software: as alterações ao código, a possibilidade de voltar sempre atrás até uma versão estável do software (óptimo quando ocorrem erros e se precisa de regredir no código), ver que alterações foram feitas no código globalmente ou apenas numa porção deste (incluindo as respostas às perguntas: quando? por quem? para que fim? em que ficheiros?), controlar eficazmente a fusão (em Inglês, merge) das alterações em vários módulos separados de software num mesmo produto unificado, e também controlar a própria documentação do software.
Sem dúvida que em qualquer projecto de software (por muito pequeno ou muito grande que seja), o controlo da informação é crucial para o sucesso do mesmo. Por isto mesmo, a tarefa de controlar as versões de um software não é de todo fácil, nem todos os sistemas de controlo de versões, ou VCS (Version Control System), são iguais e com as mesmas funcionalidades.
Esta é a primeira parte de um artigo que pretende fazer com que o leitor compreenda as novidades introduzidas na .NET Framework 3.5 bem como algumas das novidades do Visual Studio 2008.
Contudo, dada a extensão do tema, foi necessário dividi-lo em duas partes. Ambas as partes serão bastante práticas sendo apresentados exemplos de forma a que o leitor os possa usar como uma base de evolução.
Todos os exemplos deste artigo são para a linguagem C#. Contudo as mesmas novidades existem para VB.NET e Visual C++.
Fica aqui um pequeno aperitivo da segunda parte: Windows Presentation Foundation, Windows Workflow Foundation e ASP.NET 3.5.
Antes de entrar em pormenores sobre estado de visualização é necessário compreender o que é um controlo e como este funciona em ASP.NET. De certa forma o ASP.NET é uma arquitectura baseada em controlos, já que uma página é um controlo e qualquer controlo pode conter controlos filhos.
A arquitectura é semelhante à arquitectura de janelas do Windows, onde o próprio ambiente de trabalho é uma janela, que pode conter janelas filhas. Cada janela é apresentada, apresentando primeiro o seu conteúdo e depois apresentando o conteúdo das janelas filhas. O mesmo se passa em ASP.NET em que cada controlo é apresentado, apresentando primeiro o seu conteúdo e depois apresentando o conteúdo dos seus filhos. A apresentação de uma janela em Windows envolve o desenho de pixeis no ecrã, enquanto que a apresentação de um controlo ASP.NET envolve a geração de HTML para preencher uma parte da resposta a um pedido HTTP.
Antes de começar por explicar de que se trata a reflexão, talvez seja melhor perceber o que é a Meta Programação. A Meta Programação consiste na escrita de programas que manipulam ou escrevem outros programas. Pode parecer um conceito um pouco esquisito à primeira vista, mas softwares como sejam debuggers ou softwares de profile são exemplos clássicos de meta programas largamente utilizados.
Os meta programas são escritos em meta linguagens, enquanto que os programas manipulados são escritos em linguagem objecto.
A reflexão não é mais nem menos que, a capacidade de uma linguagem ter como meta linguagem ela própria. Ou seja, com a reflexão uma entidade tem a capacidade de manipular a representação da sua estrutura e comportamento durante a sua própria execução.
Desde a sua normalização pelo W3C, a linguagem XML tem vindo a ser adoptada por um número crescente de produtores de software como formato base para os documentos utilizados pelas aplicações que desenvolvem. O crescendo de utilização de documentos neste formato revelou o interesse em definir mecanismos que lhes permitissem aportar as características de segurança (origem, não-repúdio e integridade) adequadas a cenários de utilização mais exigentes. Para colmatar essa lacuna, o W3C definiu posteriormente a norma XMLDSIG. Neste artigo vamos-nos debruçar essencialmente no desenvolvimento em C# de uma pequena API para assinar digitalmente documentos XML.
Introdução e Enquadramento
De acordo com o RFC2828 uma assinatura digital define-se como sendo um valor calculado com um algoritmo criptográfico e anexado ao objecto de dados de tal forma que se possa usar essa assinatura para verificar a autenticidade e integridade dos dados.
C# é uma linguagem de programação relativamente recente, criada pela Microsoft, e foi desenvolvida juntamente com a arquitectura .NET. C# pronuncia-se ‘cê sharp’ e não ‘cê cardinal’, foi criada praticamente do zero para funcionar na nova plataforma, sem preocupações de compatibilidade com código de legado. Ultimamente, as empresas de software têm apostado cada vez mais na plataforma .NET e consequentemente no C#. Isto deriva do facto de ser uma linguagem simples, orientada a objectos (como se irá ver mais à frente), que tira partido dos serviços de segurança, da gestão automática de memória e do vasto conjunto de bibliotecas da plataforma .NET. A linguagem foi baseada em Java e C++, tirando partido das melhores características das duas, pelo que qualquer programador que esteja à vontade nestas duas linguagens não vai sentir muitas dificuldades em aprender C#. É portanto, uma linguagem que permite desenvolver software com grande robustez, respondendo aos exigentes requisitos das empresas.
Nos últimos tempos os processadores chegaram a um ponto onde se tornou praticamente impossível aumentar a sua frequência, de modo a que a solução foi passar para as arquitecturas multi-core. No entanto, nesta abordagem os ganhos não são tão lineares como podem parecer, i.e., duplicar o número de núcleos não significa duplicar a velocidade das aplicações. Isto porque se a aplicação não for projectada para este tipo de arquitectura, só irá fazer uso de um dos núcleos.
Neste artigo será abordada uma forma de responder a esta situação (não necessariamente a melhor). Assim, serão abordadas algumas system calls disponíveis em ambientes UNIX, para criação e manutenção de processos, bem como para a comunicação entre eles. Será usada a linguagem C.