Minha experiência na Apple Store e na Microsoft Store

(UPDATE 01/04/2014: Eu voltei na Apple Store no dia seguinte.)

Ontem estive na Microsoft Store e na Apple Store no shopping aqui em Bellevue. Amigos sempre me falaram sobre a experiência estelar que é o atendimento a clientes da Apple, então achei legal compartilhar como foi a *minha* experiência. Continue reading

O que o System Center tem a ver com TFS e ALM?

image Quando se fala de ALM na Plataforma Microsoft, geralmente o primeiro que vem à cabeça é “TFS”. Mas ultimamente há um outro nome que vem surgindo com uma frequência cada vez maior nas rodas de discussão sobre ALM: System Center.

Mas afinal, o que é que o tal System Center tem a ver com ALM?

Continue reading

Entenda o licenciamento do Visual Studio Online

Convenhamos: licenciamento nunca é algo fácil de se entender. Quando envolve uma nova oferta então – como é o caso do Visual Studio Online – as coisas só complicam.

Por outro lado, não dá para fugir dessa discussão. Para garantirmos que nossa empresa está devidamente licenciada (e não está desperdiçando dinheiro pagando mais que o necessário), precisamos entender exatamente como contratar e pagar pelos serviços do Visual Studio Online!

Continue reading

EPM? Pra quê?! Usa o TFS!

image

Sei que o título deste post pode causar alguma polêmica – mas acredite, é por uma boa causa Smile.

Frequentemente nossos clientes de ALM perguntam sobre o tal do “EPM” (quando, na verdade, eles querem mesmo é falar do Microsoft Project Server). Aliás, engraçado como EPM acabou virando sinônimo de Project Server….

Mas voltando ao assunto: esses clientes às vezes já têm o EPM Project Server em suas empresas. Noutras vezes, eles querem instalar o tal Project Server. E no contexto de um projeto de ALM, a pergunta obviamente é:

Dá para integrar o TFS com o Project Server?

Continue reading

Automatizando builds no TFS: além do Team Build

Pensando fora da caixa - indo além do Team BuildRecentemente o amigo e ex-Lambda3 Osmar Landin iniciou uma série de posts sobre o Jenkins. Apesar de ele normalmente escrever sobre TFS, essa nova série de posts teve uma motivação mais do que justa:

Nem todo mundo pode (ou quer) usar o TFS. Às vezes a melhor (ou a única) solução é partir para um stack open-source. Nesses casos, o que usar para automação de build?

A resposta dele a essa pergunta foi “Jenkins”. Se você se identificou com essa situação, deve ler sua série de posts. Por outro lado, apesar de eu ter me inspirado nos posts dele, minha motivação foi um pouquinho diferente. O que eu quero discutir é:

Eu uso TFS como meu repositório de controle de versão e estou mais que satisfeito. Agora, quero automatizar meus builds. O que faço?

Continue reading

Como evitar o erro de “Bookmark not defined” no Word

Aqui na Lambda3 somos ávidos usuários de Word. E um dos usos mais comuns é para a confecção de propostas técnicas/comerciais para nossos clientes. Nosso fluxo de trabalho típico é:

  1. Criamos um novo documento no Word, a partir do modelo de propostas (tipicamente usando uma proposta existente como referência);
  2. Fazemos as alterações necessárias, de acordo com o escopo da nova proposta;
  3. Salvamos o documento do Word no SharePoint; e
  4. Geramos um PDF para envio ao cliente.

O problema

O sumário (“índice”) da nossa proposta usa o recurso de Sumário (Table of Contents) do Word, gerando as entradas automaticamente a partir dos cabeçalhos das seções. Só tem um porém: como usamos uma proposta pré-existente como ponto de partida, o sumário (que já existia no documento anterior) perde a sincronia com o conteúdo do novo documento. E se o autor do documento se esquecer de ir até o sumário e o atualizar (pressionando F9), ao gerar o PDF teremos o infame “Bookmark not defined”:

PDF com erro de "Bookmark not defined" no sumário

A solução

Seria muito legal se pudéssemos configurar o Word para atualizar automaticamente o sumário, não?

A resposta é mais simples do que imaginamos: Vá em File | Options | Display (Arquivo | Opções | Exibir) e selecione a opção Update fields before printing (Atualizar campos antes de imprimir). Apesar de parecer que só ele só atualizaria os campos no instante de imprimir, o processo de geração de PDFs do Word é como se fosse uma impressão. Ou seja, o comando Salvar Como para gerar um PDF vai disparar a atualização dos campos e sincronizar automaticamente o sumário com o conteúdo atual documento. Pronto, está feita a mágica! ;-)

SNAGHTML415e40

Um abraço,
    Igor

Como listar as versões do Visual Studio que se conectam ao meu TFS

Hoje o amigo Mandrado me mandou uma pergunta que valia ser registrada num post:

(…) me lembro de você dizer em uma aula como listar a versão dos clientes (IDE VS) conectados ao TFS, não encontrei em minhas anotações.
Vc se lembra como posso listar os clientes visual studio conectados ao tfs?

Então vamos lá: como faço para saber quais são os clientes Visual Studio conectados ao meu TFS?

A tabela tbl_Command

O TFS registra em uma tabela de seu banco de dados todos os acessos remotos feitos por qualquer cliente. Essa tabela, tbl_command (no banco de dados Tfs_Configuration), mantém o registro de cada chamada a qualquer um dos web services do TFS por um período de 14 dias (que pode ser ajustado).

Uma das colunas dessa tabela é a UserAgent, que registra o nome do cliente que está se conectando ao TFS. Por exemplo, se eu acessar o TFS com um Visual Studio 2013 Ultimate, a coluna UserAgent vai conter o valor:

Team Foundation (devenv.exe, 12.0.21005.1, Ultimate, SKU: 17)

Assim, para saber quais cliente se conectaram ao TFS nos últimos dias, basta executar a seguinte consulta:

SELECT DISTINCT UserAgent
FROM tbl_Command
ORDER BY UserAgent

Ao executar essa consulta na máquina virtual do Brian Keller, este foi o resultado que obtive:

image

Um abraço,
    Igor

Adicionando novas definições de browser ao Visual Studio Web Performance And Load Test

SNAGHTML547a82b

Se você já usou as ferramentas de Teste Web do Visual Studio Ultimate (Web Performance Test e Load Test), provavelmente já deve ter visto uma caixa de diálogo similar a esta logo acima. Com ela, é possível indicar qual navegador será simulado durante seus testes. Isso é particularmente útil para aplicações Web que tenham renderização condicional – ou seja, que geram HTML específico para um dado browser. Simular vários browsers permite, portanto, exercitar esses vários mecanismos de geração condicional.

O problema

Recentemente, num cliente da Lambda3, tivemos uma demanda específica: rodar um teste de carga que simulasse os seguintes clientes:

  • Internet Explorer 8 no Windows XP;
  • Internet Explorer 9 no Windows 7;
  • Chrome 27 no Linux (Ubuntu); e
  • Chrome 31 no Windows 7.

Olhando para a caixa de diálogo acima, fica óbvio que tínhamos um problema. Mais especificamente com o Chrome. Não havia, entre as opções disponíveis, as versões de Chrome que o cliente precisava.

A solução

Felizmente, resolver isso é bem fácil. Essa lista de browsers é um sub-diretório na pasta de instalação do Visual Studio. Abra o diretório C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Templates\LoadTest\Browsers (“C:\Program Files” num Windows de 32 bits) e você vai encontrar vários arquivos com a extensão .browser, um para cada definição de browser:

Diretório com as definições de browsers

Esses arquivos são meros arquivos XML com a descrição dos browsers. Como era de se esperar, a definição mais importante para nosso caso é a string de user-agent (o cabeçalho HTTP que identifica qual browser está acessando o servidor). Veja, por exemplo, o conteúdo do arquivo Chrome2.browser:

<Browser Name="Chrome 2" MaxConnections="6">
  <Headers>    
    <Header Name="User-Agent" Value="Mozilla/5.0 (Windows; U; Windows NT 5.1;) AppleWebKit/530.1 (KHTML, like Gecko) Chrome/2.0.169.1 Safari/530.1"/>
    <Header Name="Accept" Value="*/*" />
    <Header Name="Accept-Language" Value="{{$IEAcceptLanguage}}" />
    <Header Name="Accept-Encoding" Value="gzip,deflate" />
    <Header Name="Accept-Charset" Value="ISO-8859-1,*,utf-8" />
  </Headers>
</Browser>

DICA: Para descobrir qual a string de user-agent eu devia usar para as duas versões de Chrome, consultei a lista presente no site UserAgentStrings.com.

Agora, o resto foi fácil. Criei duas cópias do arquivo Chrome2.browser (que usei como referência) e salvei-as, respectivamente, como Chrome27-Linux.browser e Chrome31.browser.

Chrome 27 no Linux (Ubuntu)

<Browser Name="Chrome 27 (Ubuntu 13.10)" MaxConnections="6">
  <Headers>
    <Header Name="User-Agent" Value="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu/13.10 Chromium/27.0.1453.93 Chrome/27.0.1453.93 Safari/537.36"/>
    <Header Name="Accept" Value="*/*" />
    <Header Name="Accept-Language" Value="{{$IEAcceptLanguage}}" />
    <Header Name="Accept-Encoding" Value="gzip,deflate" />
    <Header Name="Accept-Charset" Value="ISO-8859-1,*,utf-8" />
  </Headers>
</Browser>

Chrome 31 no Windows 7

<Browser Name="Chrome 31 (Windows 7)" MaxConnections="6">
  <Headers>    
    <Header Name="User-Agent" Value="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1623.0 Safari/537.36"/>
    <Header Name="Accept" Value="*/*" />
    <Header Name="Accept-Language" Value="{{$IEAcceptLanguage}}" />
    <Header Name="Accept-Encoding" Value="gzip,deflate" />
    <Header Name="Accept-Charset" Value="ISO-8859-1,*,utf-8" />
  </Headers>
</Browser>

Se o Visual Studio estiver aberto, não esqueça de reiniciá-lo. Agora, temos duas novas opções de navegadores para uso no Web Performance Test e no Load Test:

Caixa de diãlogo de seleção de browsers com as novas opções

Um abraço,
    Igor

Erro “An activated full version of Visual Studio Ultimate is required” ao rodar testes de carga no VS 2013

(UPDATE 21/01/2014: Inclui a referência ao Update 1, que corrige o problema)

Recentemente o Giovanni Bassi passou por uma situação que merecia ser registrada (para não nos esquecermos no futuro Smile).

Ele está usando o Visual Studio Ultimate, em conjunto com o recurso de Teste de Carga na Nuvem do Visual Studio Online para testar um projeto de um dos clientes da Lambda3.

Os primeiros testes dele – com 100 usuários virtuais – funcionaram sem maiores problema. O “enrosco” começou ao tentar subir o número de usuários virtuais para 500. Foi quando ele se deparou com a seguinte mensagem de erro:

Janela do Visual Studio com mensagem de erro na execução do teste de carga

O erro “An activated full version of Visual Studio Ultimate is required to run the load test with virtual user count greater than 250” é auto-explicativo. Para rodar testes com mais de 250 usuários é preciso uma versão do VS Ultimate (que já temos) e que esteja devidamente ativada (também era o nosso caso – ou pelo menos era o que achávamos).

O Problema

imageO Visual Studio 2013 mudou o modelo de ativação das licenças de Visual Studio. Quando você abre o Visual Studio pela primeira vez, é recebido por uma caixa de diálogo de logon para carregar seu Perfil de Usuário do Visual Studio (novidade no 2013). Essa caixa de diálogo tem um papel complementar: para assinantes MSDN, ela serve também para ativar a licença do seu Visual Studio. Essa foi uma mudança mais que bem-vinda, pois agora não é preciso mais nem saber o product key do Visual Studio. Ele mesmo localiza a licença na sua conta MSDN e se “auto-ativa.” Sweet!

Mas é claro que nem tudo são flores – senão eu não estaria escrevendo este post Smile.

Essa “auto-ativação” tem uma limitação: ela não serve para o recurso de Load Test.

A solução

O Update 1 do Visual Studio 2013 traz a correção para este problema. Após a instalação do Update o Visual Studio não reclamará mais do licenciamento.

Caso ainda não tenha instalado (ou não possa instalar) o Update 1, você precisa usar o processo antigo:

  1. Acessar sua página de Chaves de Produto da Assinatura MSDN (http://msdn.microsoft.com/subscriptions/keys);
  2. Pegar sua chave do Visual Studio Ultimate 2013; e
  3. Ative seu VS com uma chave de produto (Help | Register Product | Change my Product License).

 image

Para saber mais, veja este item no Connect.

 

Um abraço,
    Igor

Erro: Parâmetros de Build não aparecem no TFS 2013

Se você estiver usando o Visual Studio 2013 RTM e o TFS 2013 RTM, ao agendar um build vai reparar que a lista de parâmetros virá em branco:

Caixa de diálogo "Queue new build" com lista de parâmetros em branco

Esse é um erro conhecido e que só acontecer com a combinação Visual Studio 2013 RTM + TFS 2013 RTM. Veja mais informações em http://blogs.msdn.com/b/visualstudioalm/archive/2013/10/18/visual-studio-2013-tfs-version-control-build.aspx.

Como corrigir

A Microsoft liberou um hotfix que resolve esse problema. Baixe-o em http://download.microsoft.com/download/6/C/D/6CD8507E-E11A-46DC-AE13-663ECAB66E18/VS12-KB2898341.exe.

IMPORTANTE: O hotfix é para o Visual Studio, *não* para o TFS. Logo, deve ser instalado em todas as máquinas com Visual Studio que podem ser usadas para agendar manualmente um build.

Depois da instalação, a lista de parâmetros voltará a aparecer:

Caixa de diálogo com a lista de parâmetros corrigida após hotfix

Um abraço,
    Igor

Como automatizar builds no Windows XP com TFS 2013

imageA inspiração deste post veio da necessidade específica de um de nossos clientes. Ele tem um enorme sistema de ERP escrito em Delphi e que estamos trazendo para dentro do TFS.

Até aí, nada de mais. Não fosse um “pequenino” detalhe:

Versões mais antigas do Delphi – como 5, 6 ou 7 – têm problemas de compatibilidade com novas versões do Windows. Por isso, um agente de build capaz de compilar aplicações Delphi depende do Windows XP.

Ignoremos por um segundo o fato de que o Windows XP não é mais suportado. O cliente precisa manter um sistema legado e nós vamos ajuda-lo com isso.

Mas aí surge outro complicador: o agente de build do TFS 2013, baseado no .NET 4.5.1, requer no mínimo Windows 7. E agora, como resolver esse conflito entre o Windows exigido pelo Delphi (XP) e o exigido pelo agente de build do TFS (7 ou superior)?

A resposta é, na verdade, mais simples do que esperamos. Ela envolve um “truquezinho” relativamente desconhecido: combinar um servidor TFS 2013 com um serviço de build TFS 2010. Sim, é isso mesmo. Você pode usar um agente de build 2010 com um servidor TFS 2013!

Bem, vamos por partes: Por que cargas d’água alguém quereria usar um agente de build antigo ao invés do novo que vem com o TFS 2013? Bem, existem dois motivos para isso:

  1. Atualização gradual de ambiente: Clientes que já usam o TFS provavelmente têm ambientes com um ou mais servidores de build. Até o TFS 2010, sempre que você atualizava sua versão do TFS (por exemplo, do 2005 para o 2008 ou do 2008 para 0 2010) era obrigado a atualizar também todos os servidores de build. Isso tornava a atualização um processo ainda mais complicado (e arriscado) pois envolvia o roll-out simultâneo em vários servidores. Contudo, desde o TFS 2012, você tem a opção de manter os agentes de build na versão anterior e atualizar só o servidor. Com isso, você poderia atualizar gradualmente os agentes de build num segundo momento;
  2. Compatibilidade com tecnologias legadas: Se você precisa fazer automação de build de tecnologias que não funcionariam num novo agente TFS 2012/2013 – por exemplo, devido à atualização da versão mínima do Windows ou à atualização do .NET Framework – o ideal seria não atualizar o agente de build. O TFS 2010 (e, por conseguinte, seu serviço de build) foram feitos sobre o .NET Framework 4.0, que é a última versão a suportar o Windows XP. Assim, você pode ter o serviço de build do TFS rodando sobre Windows XP (*).

No nosso caso o motivador foi a compatibilidade com legado. E a solução foi bem simples.

Integrando um agente 2010 a um servidor 2013

Instale em uma máquina Windows XP o TFS 2010. Não esqueça de instalar também o Service Pack 1. Na máquina XP, você precisará apenas do serviço de build:

Programa de Instalação do TFS 2010 com a opção de Build selecionada

Depois da primeira fase da instalação (que apenas copia os binários para o servidor) vem a configuração. Comece selecionado sua Team Project Collection no TFS 2013 à qual o serviço de build será associado:

Associando o novo serviço de build ao TFS 2013

Agora, configure o serviço. Hospedaremos um controlador e seu(s) agente(s):

Criando um controlador e um agente no serviço de build 2010

IMPORTANTE: Sempre precisamos instalar um novo controlador. Não podemos misturar controladores e agentes de versões diferentes.

E finalmente, mas não menos importante: Você deve obter um build process template (o script de build em formato XAML) do TFS 2010. Os agentes de build 2010 não são compatíveis com os arquivos XAML nativos do TFS 2013. Para isso, acesse um servidor TFS 2010 (se você não tiver um, sugiro que baixe a máquina virtual do Brian Keller) e copie os arquivos DefaultTemplate.xaml, LabDefaultTemplate.xaml e UpgradeTemplate.xaml (além de quaisquer templates de build de 2010 que você porventura possa ter):

TFS 2013 com os modelos de processo do 2010 para uso no agente de build 2010

Conclusão

Viu como dá para ter um agente de build 2010 rodando em um computador Windows XP(*) juntamente com sua infraestrutura TFS 2013?

Agente de teste 2010 rodando num computador Windows XP (Server 2003)

Um abraço,
    Igor

 

(*) Se você reparou na última figura, deve ter notado que estou, na verdade, usando um Windows Server 2003 (e não um Windows XP). Fiz isso porque: (1) O Windows Server 2003 é a versão servidor do Windows XP. Portanto, do ponto de vista da compatibilidade com o Delphi, atende à nossa necessidade. Além disso, (2) o Windows XP tem um problema de compatibilidade com o Hyper-V que faz com que o desempenho da máquina virtual seja muito comprometido.

Ocultando a barra de ferramentas do LastPass no Internet Explorer

imagePost-relâmpago! Smile

Numa discussão sobre Internet Explorer no Twitter, mencionamos o LastPass. Foi quando o André Nascentes fez o tuíte abaixo:

Não sabe do quê ele está falando? É o seguinte:

O LastPass é um excelente gerenciador de senhas para todos os browsers. Quando você o instala no IE, esta é a experiência que aparece após a instalação:

Internet Explorer após a instalação do LastPass

Notou a barra de ferramentas ridícula que o LastPass colocou no IE? O André tem toda razão ao achar uma sacanagem a “barrinha estilo IE6”. Afinal, quem de nós nunca ficou traumatizado com essas “barrinhas” ao ir na casa de um parente para “limpar” o IE de algo assim?

Socorro!

Compare com a experiência do LastPass no Chrome:

image

Mais agradável, não?

Agora, o que poucos sabem: também dá para ter uma experiência “minimalista” no IE! Faça o seguinte:

  1. Clique em Ferramentas | Preferências na barra do LastPass no IE:
    Menu Ferramentas | Preferências no LastPass
  2. Agora em Geral | Aparência, selecione a opção “Usar Somente os Botões da Barra de Comando”. Ele vai pedir para você reiniciar o IE após isso:
    Opção “Usar Somente os Botões da Barra de Comando"

O que aconteceu?

Agora, o IE fechou aquela barra de ferramentas tosca Smile e integrou o botão LastPass (o mesmo botão único que aparece no Chrome) à Barra de Comandos do IE:

Botão LastPass - sem a barra ferramentas

Como eu gosto de manter a Barra de Favoritos aberta tanto no IE quanto no Chrome, a experiência final* fica assim:

Comparando a experiência final entre IE e Chrome

Bem melhor, não?

 

Um abraço,
    Igor

 

* Para chegar nessa “experiência final” do IE foi necessário um último passo. Eu personalizei a Barra de Comandos para trazer o botão do LastPass para cima, deixando ele à mão:

image