terça-feira, 25 de agosto de 2009

Perdi a senha do Admin no VSS

Achei um utilitário para limpar a senha do usuário Admin de uma instalação de Visual SourceSafe 6.0. Basta descompactar e rodar este arquivo aqui em um prompt de comando no diretório VSS\Data da sua instalação, renomear um arquivo (aparece na tela qual o arquivo a renomear), e pronto. Foi fácil achar - foi o terceiro resultado da pesquisa no Google -, mas esse treco é tão velho que é melhor guardar em algum canto.

segunda-feira, 24 de agosto de 2009

RSAT para Windows 7

A Microsoft disponibiliza um pacote de ferramentas administrativa muito útil chamado RSAT – Remote Server Administration Tools. Foi lançada uma versão beta para Windows 7, já que a versão do RSAT para Windows Vista não funciona no W7. Só que na Internet tem vários links incorretos para a página de download do RSAT para W7. E além disto, aparentemente a MS se esqueceu de colocar a string “RSAT” na página que descreve o download da ferramenta em download.microsoft.com, pois uma procurar por RSAT lá não lista o RSAT para W7 (será que é por que a procura é “Bing-based”? ;-). Só consegui localizar o pacote procurando por remote tools windows 7. O endereço do qual consegui fazer o download é http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=7d2f6ad7-656b-4313-a005-4e344e43997d. Aproveitem!

segunda-feira, 17 de agosto de 2009

MSN não minimiza mais!!!

No Windows 7, O MSN não minimiza mais para a área de notificação (system tray ou "bandeja do sistema", aqueles ícones na parte direita da barra de tarefas do Windows). Ficam sempre um ou dois botões na barra de tarefas, e se você tenta fechá-los, acaba fechando o MSN. Se você deseja o comportamento antigo do MSN no Vista, basta selecionar o ícone do MSN no Menu Iniciar do Windows, botão direito > Propriedades, e na tab "Compatibilidade", selecionar na lista "Rodar este programa em modo de compatibilidade com" o valor "Windows Vista". Pronto, o MSN minimiza "normalmente" agora...

sexta-feira, 14 de agosto de 2009

Desenvolver Ou Não Desenvolver, Eis a Questão

Estava fuçando o Twitter e pensei: como faço pra ver os tweets da galera que estou acompanhando, de forma fácil? Aí tive a idéia de implementar um gadget pra Barra Lateral do Windows Vista que mostrasse os tweets de algumas contas que eu configurasse. Comecei a estudar como desenvolver um gadget pra Barra Lateral do Vista, e encontrei alguma material sobre isto no MSDN (Windows Sidebar: Introdução aos Gadgets, Developers Guide e Reference).

Em resumo, os gadgets nada mais são do que código HTML mostrados em janelas que são instâncias aparentemente restritas do Internet Explorer (restritas pois tentei mostrar um objeto em Flash e não rolou). Peguei o código HTML pra mostrar meus tweets em uma página HTML, coloquei em um gadget, e apareceu lá. Nice...

Bem, feita a "prova de conceito", vamos desenvolver o gadget todo. Quero alguma coisa que dê para eu configurar quais contas no Twitter eu quero visualizar. Tem que ser mostrados os tweets mais recentes de todas as contas configuradas. Ok. Tenho que criar um tela de configuração pra que sejam fornecidas as contas que quero acompanhar. Tenho que bolar algum jeito de mostrar os tweets recentes de todas essas contas, algo como recarregar a tela de x em x segundos com os tweets da próxima conta da lista que defini, ou talvez uma barra de rolagem... Hummm, fazer isso em JavaScript (eca)....

No final usei o gadget de vizualizar RSS do Vista, acrescentei uma instância pra o RSS de cada conta do Tweeter que queria acompanhar e fui gastar meu tempo em algo mais "nobre". Moral da estória é que às vezes a solução não sai exatamente como desejamos (ou até mesmo longe do ideal), mas para o nosso cliente, na grande maioria das vezes, a solução parcial atende totalmente às suas necessidades, mesmo que uma solução mais completa "atendesse mais".

Isto é terrível pra um desenvolvedor que gosta de desenvolver. É a mesma coisa que jogar um osso pra um cachorro e falar "Ó, morde só um pouquinho e depois me devolve". E geralmente nós, desenvolvedores, reagimos como cachorros - algumas rosnadas e até uma eventual mordida Sorriso. Mas nós temos que lembrar que o objetivo último de nossa profissão é atender às necessidades do cliente. E tem como se divertir trabalhando assim também. Versionamento, entregas curtas e outros conceitos semelhantes permitem que nós organizemos nosso trabalho para fazer isto. É só se esforçar um pouquinho pra "dividir o osso" com nosso cliente - afinal de contas, às vezes a gente esquece, mas ele também quer usar a solução... Wink

quinta-feira, 6 de agosto de 2009

WCF, Parte 2: Análise de uma Aplicação WCF

Esta é a parte 2 de uma série de posts sobre WCF. Leia a parte 1.

Depois da introdução sobre WCF na parte 1 desta série, vamos examinar quais os processos envolvidos na solicitação e na execução de um serviço, e depois examinaremos como modelar um sistema que seja dividos nestes processos. Na parte 3 finalmente iremos codificar e analisar o código de cada um dos processos em questão. Este post está dividido nas seguintes sessões:

Hello WCF: Arquitetura de Processos: quais são as aplicações que compõem nossa aplicação distribuída, e como elas se comunicam.
Hello WCF: Arquitetura do Código: Como está organizado o código destas aplicações.

Hello WCF: Arquitetura de Processos

Vamos primeiro entender quais são os processos envolvidos na nossa primeira aplicação WCF. Estamos disponibilizando um serviço na rede que executa a espetacular operação de gerar a string Hello WCF!!! toda vez que é invocado. Um dos requisitos do nosso serviço é que ele possa ser invocado de qualquer máquina da nossa rede, então pelo menos duas máquinas estarão envolvidas no processamento: o cliente e o hospedeiro (mas vou chamar esta última de host porque “hospedeiro” doeu fundo no ouvido ;-). O cliente é a máquina que solicita o serviço, e o host é a máquina aonde o serviço é executado.


Fig.1 – As máquinas cliente e host.

Na verdade, não são máquinas que se comunicam, mas sim processos rodando nestas máquinas. Facilita o entendimento pensar como sendo dois processos em máquinas diferentes (Fig. 2), mas neste nosso teste ambos os processos, cliente e host, estarão rodando na mesma máquina.


Fig.2 – Os processos cliente e host.

WCF torna a comunicação entre os processos envolvidos o mais transparente possível. Neste caso, iremos usar o protocolo HTTP para a comunicação entre clientes e host. Ao usarmos WCF na nossa aplicação host, os objetos do namespace System.ServiceModel já provêem quase tudo que é necessário para que o host receba pedidos de execução de serviços provenientes de HTTP.SYS, que é o componente do IIS que recebe os pedidos de comunicação HTTP e os despacha para o “processo certo”. Você verá no código do host como ele avisa ao IIS que está esperando pedidos de acesso, e aonde ele está esperando – é o conceito de endpoint, que é o ponto de chegada de pedidos de acesso a um serviço WCF.


Fig.3 – Ao usar HTTP, o endpoint é gerenciado por HTTP.SYS, que envia o pedido de acesso ao serviço para o processo host.

Como a escolha do protocolo de comunicação é um detalhe de implementação, na próxima figura vamos retirar HTTP.SYS do esquema. A figura 4 retrata as trocas de mensagens entre cliente e host, e como o serviço é disponibilizado:

  • É criada uma classe na aplicação host que representa o serviço (ServicoHelloWCF);
  • Este serviço disponibiliza uma série de operações, que são os métodos da classe que implementa o serviço. Neste caso, nosso serviço tem apenas uma operação, cuja assinatura é: string HelloWCF() – ou seja, uma operação chamada HelloWCF, que não recebe parâmetros e retorna uma string.
  • O cliente envia uma mensagem de execução de uma operação ao processo host; o processo instancia a classe que implementa o serviço, executa o método que corresponde à operação desejada, e retorna o resultado para o cliente.


Fig.4 – A execução de uma operação de um serviço WCF.

Hello WCF: Arquitetura do Código

O código de nossa aplicação exemplo será dividido em 3 projetos: duas aplicações Console e uma Class Library.

As aplicações Console representam o cliente e o host, os dois processos se comunicando. A aplicação Class Library representa o contrato do serviço. O contrato do serviço é uma descrição – atenção meninos, descrição, e não implementação – do serviço oferecido pelo host. Já comentamos antes que um serviço WCF é um conjunto de operações, sendo o serviço implementado por uma classe, e as operações implementadas pelos métodos desta classe. O contrato do serviço descreve esta classe e seus métodos, mas não os implementa. Tanto o cliente quanto o host tem que conhecer os detalhes do serviço sendo invocado. O cliente tem que saber quais operações ele pode invocar, e como elas devem ser invocadas. O host tem que implementar exatamente o que o cliente espera invocar. Ou seja, ambos, cliente e host, tem que conhecer e obedecer à descrição do serviço. Desta forma, aparece o terceiro projeto na nossa solução, que nada mais é do que uma Class Library compartilhada entre cliente e host, que contém uma interface que define o contrato do serviço: quais as operações que cada serviço oferecido deve implementar.


Fig.5 – Usaremos uma Class Library para compartilhar uma interface (ITesteWCF) que descreve o service contract.

Veja que ambos os projetos, o Cliente e o Host, usam a interface ITesteWCF que contém o contrato do serviço. O Cliente usa a inteface para saber como chamar o serviço; e o Host a utiliza criando uma classe que implementa esta interface, desta forma criando uma classe que implementa o serviço oferecido.

No próximo post veremos o código de cada um destes projetos: o contrato do serviço, o host e o cliente.

Update: Apesar de esta postagem ser antiga, notei que recentemente o acesso a ela tem aumentado. Infelizmente, o envolvimento em outros projetos parou meu estudo de WCF. Por isto, não escrevi a sequência de artigos sobre WCF que iria se iniciar com este post. Espero que quando entrarmos em um projeto que use WCF eu volte para esta série.

Atenciosamente,

GB

terça-feira, 4 de agosto de 2009

"Executar Como..." no Vista

Precisei logo depois do Management Studio Express, pra poder executar ele com a minha conta de administração de rede:
ShellRunas provides functionality similar to that of Runas to launch programs as a different user via a convenient shell context-menu entry.
Descompacte e execute com o parâmetro /reg. Isto cria a entrada "Run as different user" no menu de contexto dos link e executáveis.

SQL Server Management Studio Express

(Aposto que muita gente já conhece, mas como estive fora da área por muito tempo, aí vai)

Prático e gratuito:
http://www.microsoft.com/downloadS/details.aspx?familyid=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796&displaylang=en
Microsoft SQL Server Management Studio Express (SSMSE) is a free, easy-to-use graphical management tool for managing SQL Server 2005 Express Edition and SQL Server 2005 Express Edition with Advanced Services.



Só um update, tem pro SQL 2008 também: http://www.microsoft.com/Downloads/details.aspx?familyid=08E52AC2-1D62-45F6-9A4A-4B76A8564A2B&displaylang=pt-br