Postagens

Mostrando postagens de outubro, 2011

Como fazer undo-checkout em arquivos de um outro usuário

Hoje tivemos que remover os arquivos que estavam em checkout para uma das pessoas que trabalham com a gente. Só que o detalhe é que a máquina que essa pessoa usou para fazer o checkout, e consequentemente as informações que ficam no workspace , não estavam mais disponíveis (a máquina foi trocada, e a antiga sabe-se lá onde está). Então, como desfazer os checkouts existentes? A maneira que encontramos foi, utilizando um usuário administrador dentro do team project, fazer a remoção do checkout através de linha de comando (tf.exe). Primeiramente, buscamos o nome do workspace que estava associado ao usuario, através do comando abaixo. Retornaram duas ocorrências, que são a máquina antiga e a máquina nova. Essa informação será importante depois. C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE>tf workspaces /owner:acroberto Collection: tfs.intra.cliente.com.br\TPC Workspace     Owner     Computer      Comment ------------- --------- ------------- ----------

Pérola: como dificultar o tratamento de erro de aplicações

Vamos dar uma olhada no método abaixo, que foi pego de uma situação real (mudei os nomes de variáveis para evitar que reclamem que o coloquei aqui). Nesta aplicação, há uma necessidade de sincronizar dados de usuários, buscando dados do sistema A e atualizando no sistema B. public static void AtualizarUsuarios() { try { using (BatchFacade batchFacade = new BatchFacade()) { List<Usuario> usuariosSistemaA = batchFacade.ListarUsuariosSistemaA().GetRegistros<List<Usuario>>(); List<Usuario> usuariosSistemaB = batchFacade.ListarUsuariosSistemaB().GetRegistros<List<Usuario>>(); foreach (Usuario usuarioA in usuariosSistemaB) { Usuario usuarioB = usuariosSistemaA.Find(delegate(Usuario u) { return u.SIAP.Equals(usuarioA.Codigo.ToString()); }); if (usuarioB != null && UsuarioModificado(usuarioA, ref

Limitações ao se trabalhar com o TFS 2010

Imagem
Ao se trabalhar com o TFS, existem algumas limitações que devem ser levadas em consideração na hora de criar team projects ou work items. É importante conhecer isso para não ter problemas na hora de decidir como estruturar seus projetos (Nenhuma limitação listada é impeditiva para se trabalhar com o TFS, é só se preparar e evitar as situações que elas possam ocorrer ou serem necessárias). Obs. Esta lista foi retirada do livro Professional Team Foundation Server 2010 (Wrox Programmer to Programmer) . []’s Renomear um Team Project Após a criação de um team project (repositório de código-fonte, atividades do projeto, etc.) não é possível renomeá-lo. Uma vez escolhido o nome, será este para sempre, então tome cuidado ao escolher. Caso contrário, se realmente você quiser “renomear”, terá que criar um novo team project e migrar todo o conteúdo do anterior… Mover work items entre Team Projects e Team Project Collections Não é possível mover work items entre team projects diferentes, visto q

Uso de static em OOP: escolhendo a arma correta

Imagem
Já vi sistemas desenvolvidos em linguagens orientadas a objetos em que todos os métodos das classes eram estáticos. Uma vez perguntei para uma pessoa o motivo dela estar programando dessa maneira. Ela não soube me responder. Bom, por que não devemos colocar static em todos os métodos? Para mim, a melhor resposta é comparar o uso de métodos static com o uso de baionetas. Antes do uso da pólvora, as guerras eram travadas geralmente em combate corpo-à-corpo, com o uso de objetos cortantes como espadas ou machados. No final do século XVIII, na França, começaram a ser produzidas as primeiras baionetas. Baioneta é uma arma branca de curto alcance que pode ser presa na ponta de um fuzil. Dessa maneira, em situações especiais como combate próximo (trincheiras) ou simplesmente falta de munição, os soldados possam utilizar suas armas de fogo como lanças. Mas é claro que atualmente, na maioria das situações, é preferível utilizar fuzis com o objetivo que eles foram criados: disparar pro

Pérola: como remover caracteres de uma string

Encontrei este código no qual o desenvolvedor queria remover os pontos, traços e barras de um CNPJ formatado (de "12.345.678/0001-00" para "12345678000100"): string estab = string.Empty; char[] delimitadores = new char[] { '.', '/', '-' }; string[] partes = lblCNPJEstabelecimento.Text.Split(delimitadores, StringSplitOptions.RemoveEmptyEntries); for (int i = 0; i < partes.Length; i++) estab = estab + partes[i]; }  Bizarro... Para remover uma única ocorrência, o método Replace é indicado: http://msdn.microsoft.com/en-us/library/fk49wtc1.aspx Outra alternativa é utilizar regular expressions: http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.replace%28v=VS.100%29.aspx O link abaixo possui um extension method para remover vários caracteres: http://www.csharptricks.com/blog/2006/10/remove-characters-from-string-cnet.html Mantenham o código simples e limpo... []'s

Nota rápida: Concatenando valores com caractere de separação em C#

Abaixo está um exemplo rápido de como concatenar um array de strings em uma única string, separando esses valores por um caractere. [TestMethod] public void TestarConcatenacao01() { var arr = new[] { "s1", "s2" }; var s = string.Join(";", arr); Assert.AreEqual("s1;s2", s); } [TestMethod] public void TestarConcatenacao02() { var arr = new string[] { }; var s = string.Join(";", arr); Assert.AreEqual(string.Empty, s); } [TestMethod] public void TestarConcatenacao03() { var arr = new[] { "s1" }; var s = string.Join(";", arr); Assert.AreEqual("s1", s); }  string.Join substituí com uma linha um código que acabei de ver, onde eram feitos um foreach e vários condicionais para conseguir o mesmo objetivo (umas 5 linhas, no mínimo). []'s