November 2008 - Posts

Para quem não conhece, o FxCop é uma ferramenta de análise de código que identifica pontos de melhoria em:

  • Design;
  • Localização;
  • Performance; e
  • Segurança.

Com base no Design Guidelines para desenvolvedores de Class Libraries, o FxCop identifica e exibe os pontos que podem e devem ser melhorados.

Vou destacar alguns pontos que classifico como interessantes e até mesmo curiosos. São eles:

  1. Do not catch general exception types – Explicação: You should not catch Exception or SystemException. Catching generic exception types can hide run-time problems from the library user, and can complicate debugging. You should catch only those exceptions that you can handle gracefully. Ou seja, trate apenas exceções específicas, que você consegue identificar de forma muito mais fácil ou simplesmente faça um Throw da exceção genérica. Essa é nova para mim;

  2. Specify CultureInfo – Explicação: Because the behavior of 'String.ToUpper()' could vary based on the current user's locale settings, replace this call in 'bus_proposta_leitura.LerAcessoControleBlocoInformacoes(Integer, String, String)' with a call to 'String.ToUpper(CultureInfo)'. If the result of 'String.ToUpper(CultureInfo)' will be displayed to the user, specify 'CultureInfo.CurrentCulture' as the 'CultureInfo' parameter. Otherwise, if the result will be stored and accessed by software, such as when it is persisted to disk or to a database, specify 'CultureInfo.InvariantCulture'. De novo uma novidade para mim, o ToUpper e o ToLower usam as configurações da cultura em que a aplicação está rodando e essas configurações podem ser diferentes de uma cultura para outra.

  3. Identifiers should be cased correctly - Explicação: Type, namespace, and member identifiers are Pascal-cased. Parameter identifiers are camel-cased. Two letter acronyms within these identifiers should be upper-cased, for example, use System.IO instead of System.Io. Acronyms of three or more letters should be Pascal-cased, for example, use System.Xml instead of System.XML. The pascal-casing convention capitalizes the first letter of each word, as in BackColor. The camel-casing convention formats the first letter of the first word in lowercase and capitalizes the first letter of all subsequent words, as in backgroundColor. Although it may be common practice for some two letter acronyms to not be fully capitalized, violations of this rule should not be excluded for this reason. For example, 'DbConnection',is common but incorrect; use DBConnection. A violation of this rule might be required for compatibility with existing, non-managed symbol schemes. In general, however,these symbols should not be visible outside the assembly that uses them. Poxa, tudo bem que a nomenclatura deve ser seguida, mas, levar ao pé da letra assim, é sacanagem, apesar de ajudar muito, gostaria ver alguém que no dia-a-dia segue essas notações.

Esses são apenas algumas que apareceram aqui no meu projeto, dependendo do projeto de vocês podem aparecer algumas mais interessantes ainda. Qual mensagem “diferente” apareceu para vocês?

Ah, faça o download do FxCop 1.36 Beta aqui.

Abraços…

Chilá!@!

Esso erro, chato, me assolou durante o desenvolvimento de um componente do framework corporativo.

Como os componentes estão em pleno desenvolvimento, os nomes e namespaces mudam e com isso o aplicativo de teste, estava com as duas versões, com os dois namespaces diferentes dentro do BIN e com isso o erro acima aparecia.

A solução para aqueles que enfrentarem esse problema é simplesmente limpar a pasta bin e a pasta Temporary ASP.NET Files.

Página sobre erro no MSDN - Aqui

Abraços…

Chilá!@!

Aqui está uma tarefa rotineira, porém, não encontramos muita documentação sobre isso quando estamos começando com a programação em ASP.NET. Saber controlar os PostBacks é essencial para o desenvolvedor, então, como impedir que um postback ocorra?

Simples! Basta associar uma rotina javascript ao click do seu controle, que pode ser um botão, imagebutton ou o que quer que seja, e realizar o retorno do javascript com o valor de falso.

Primeiro, associamos uma função Javascript ao nosso controle, isso pode ser feito no Page_load ou em qualquer outra rotina de inicialização da página, assim:

protected void Page_Load(object sender, EventArgs e)
{
    ImageButton1.Attributes.Add("onclick", 
                       "javascript:EvitaCliqueDuploAprimorado();");
}

Depois na nossa rotina javascript, realizamos o tratamento desejado. Aqui, eu aproveitei e tratei para que o botão não seja clicado mais do que uma vez, evitando assim, uma chamada adicional ao servidor com o mesmo conteúdo enviado anteriormente.

<script type="text/javascript">
 
       var controlaEnvio = false;
 
       function EvitaCliqueDuploAprimorado() {
 
           if (!controlaEnvio) {
               controlaEnvio = true;
               return controlaEnvio;
           }
           else {
               alert('Você já clicou nesse botão, aguarde até que a sua' + 
                        'requisição seja processada pelo nosso servidor!');
               return false;
           }   
 
       }
   
   </script>

Bem, é isso, abraços… ah, tive que forçar a quebra de linha do código-fonte para que ficasse legível!!

Chilá!@!

Alguns podem não gostar, mas a Agência Nacional de Segurança dos Estados Unidos tem um belo documento sobre segurança na plataforma .NET 2.0.

Abraços.

Chilá!@!

Fonte: Blog do Doug

Bem, para quem gosta de ficar com as mãos só no teclado enquanto trabalha, segue uma lista de links muito boa:

  1. Visual C# 2005 Keyboard Shortcut Reference Poster
  2. Visual Basic 2005 Keyboard Shortcut Reference Poster
  3. 2007 Office System Document: Developer Posters
  4. .NET Framework 3.5 Common Namespaces and Types Poster
  5. Visual Basic 2008 Keybinding Reference Poster
  6. Visual C# 2008 Keybinding Reference Poster
  7. Keyboard Shortcuts for Windows XP

E é só…

Abraços…

Chilá!@!

Pois bem, depois de brincar bastante com o Live Mesh (e aqui bastante é bastante mesmo, sincronizei mais de 15Gb nos últimos dias) resolví testar a funcionalidade de resolução de conflitos. Mas antes de explicar o que são conflitos tenho que dizer mais sobre o Live Mesh.

Compartilhando uma de suas pastas com algum amigo

É possível que você adicione algum amigo seu para visualizar e até mesmo colaborar com a sua pasta no Mesh. Para isso, basta abrir a sua pasta Mesh e no painel do Mesh que se abre do lado direito escolher Members | Invite, como na imagem abaixo:

 

image

Após escolher invite,  uma nova janela será aberta e nela você informa quem você deseja convidar.

 

image

Aí basta digitar o endereço do seu “compadre” ou “comadre” e pronto, vocês começarão a compartilhar a mesma pasta.

 

Mas e se os dois editarem um arquivo ao mesmo tempo?

Ahá, não contavam com a minha astúcia!! A equipe do Live Mesh pensou nisso e caso ocorra um problema desses, uma mensagem, indicando esse problema será exibida no painel da pasta com o problema, assim como na imagem abaixo:

 

image

No exemplo acima, a pasta chamada “Marco e Fábio” tem um problema. Editamos o mesmo arquivo, “teste.txt”, ao mesmo tempo e antes de que uma máquina sincronizasse com a outra, por isso a mensagem de aviso. Clicando nela:

image Aparece a janela de resolução de conflito, aonde você escolhe o que fazer:

    1. Ficar com a sua versão; ou
    2. Ficar com a versão do seu “amigo”; ou
    3. Ficar com as duas, sendo que uma será renomeada automaticamente.

Muito bom não? Testei e posso dizer que funciona!! Para quem ainda não tem o seu Live Mesh, basta ir para o site, clicando aqui.

Abraços…

Chilá!@!

Pessoal, eu postei há alguns dias, VÍDEOS/PPTXS DO PDC2008 PUBLICADOS PARA DOWNLOAD e agora, após assistir alguns posso dizer a vocês que o formato ficou incrível.

Ainda não terminei de baixar todos os arquivos, aproximadamente, 500 arquivos, metade PPTx e a outra metade os vídeos. Segundo minhas contas, todos os arquivos, após baixados, ocuparão aproximadamente 60Gb. É muita coisa vocês podem pensar, mas é muito boa a qualidade também. Para aqueles que não viram ainda, olhem na imagem abaixo como fica o vídeo em seu monitor:

image

Do lado direito e maior, fica a apresentação que o palestrante utilizou e do lado esquerdo, você vê o palestrante. É realmente uma grande sacada, eu já assití algumas das apresentações e é incrível. Ah e baixem o arquivo com Alta-qualidade (HQ em inglês) realmente a diferença vale a pena. Enquanto um arquivo normal tem de 200Mb a 300Mb o de alta-qualidade chega a ter de 500Mb a 600Mb.

Bem, fica aí a dica, espero que vocês estejam gostando do conteúdo tanto quanto eu.

Abraços.

Chilá!@!

É incrivel, como nos acostumamos com uma coisa e deixamos de enxergar as outras. Eu, nos meus projetos, sempre me pergunto: “Dessa maneira, o usuário ficará satisfeito?”, “Não estou desperdiçando recursos do servidor?” e até mesmo a famosa “Será que estou sendo muito preguiçoso publicando uma solução assim?”.

Pois bem, vou citar dois exemplos:

1 – Você precisa de uma página e sem pestanejar, cria um ASP.NET WebForm, sendo que uma página HTML com um pouco de HTML resolve seu problema.

2 – Você somente se preocupa em fazer funcionar e não em ter uma solução que não irá se comportar bem quando for altamente requisitada.

No primeiro caso, o que ocorre é que nós, desenvolvedores nos esquecemos de analisar pura e friamente qual a necessidade da página que estamos criando. Recentemente, eu precisei de uma página que iria aceitar alguns parâmetros e então solicitar um relatório ao Crystal Entreprise. A minha primeira escolha foi criar um ASP.NET WebForm e colocar toda a lógica que eu precisava lá e pronto. Mas, depois, pensando bem, eu percebí que não precisava de uma Ferrari para ir até a esquina, somente precisava de uma bicicleta, patinete ou simplesmente um chinelo…

Pois então, criei a danada da página como HTML, pura e simplesmente e com toda a lógica de tratamento dos campos sendo feito em javascript.

Mas o que eu ganhei com isso? Simples, nada! Mas o usuário e o meu servidor web agradeceram, já que para uma página HTML ser servida, ela consome menos recursos do que qualquer página ASP, ASP.NET ou seja lá qual for a linguagem de desenvolvimento utilizada.

No segundo caso, que eu classifico como tão grave quanto o primeiro, o principal problema é que você pode se deparar com uma grande ou total reescrita do aplicativo, apenas porquê não se preocupou com a performance durante a fase de desenvolvimento. É muito mais fácil e mais barato para o projeto, e consequentemente para o desenvolvedor, ajustar a aplicação para uma melhor performance e uma segurança mais elaborada enquanto está codificando a solução do que quando a devida solução está pronta e precisa ser reescrita. Não importa se é uma pequena, média, grande ou total reescrita de código, o desenvolvedor gosta de coisa nova e dar manutenção em sistema é geralmente chato.

Por isso, minha dica, e olha que já sofrí um bocado com problemas de performance é:

1 – Não utilize, nas suas instruções T-SQL, “Select * From [Tabela de Tal]” – Isso compromete a sua velocidade e a manutenção desse aplicativo, já pensou se algum desavisado vai na sua tabela e cria mais 50 campos cada um ocupando 4000 posições alfanuméricas? O que o seu comando “Select *“ vai começar a trazer quando isso acontecer?

2 – Após criar a sua Stored Procedure ou comando T-SQL, verifique o plano de execução da mesma, faça o Tunning antes da aplicação entrar em produção, verifique a quantidade de leituras e escritas que são exibidas no plano de execução para ter certeza de que está utilizando a melhor solução possível para a pesquisa.

3 – Se coloque no lugar do usuário, muitas vezes, os testes são viciados, em um cadastro de Notas Fiscais por exemplo, testamos sempre com uma, duas, talvez com cinco. Mas e se acontecer uma caso em que o usuário precise cadastrar 50, 100, 1000 notas? A sua solução ainda será razoável? Use sempre essa dica do 50, 100, 1000 para testar se a sua solução atende a todos os seus usuários, cenários atuais e cenários que possam aparecer.

Por isso pessoal, nada como se colocar na “pele” do usuário, afinal, quantas vezes não reclamamos do site do banco em que somos clientes, mas não olhamos para a nossa aplicação e verificamos que nela existem os mesmos defeitos ou até mesmo, defeitos piores.

Bem, era só isso… um abraços e até mais…

Chilá!@!

Alguns amigos me perguntam, quais blogs eu leio para ficar “ligado” nas notícias sobre a plataforma Microsoft. Pois bem, aqui está o meu OPML, minha lista de blogs favoritos e que vocês podem importar nos leitores RSS de vocês.

Abraços e manterei o arquivo atualizado, sendo que criarei um link na barra lateral do Blog para um melhor acesso.

Chilá!@!

Esse post é para quem ainda usa o Windows XP, aliás, nada contra o XP, mas se você tem uma máquina com dois núcleos e no mímino 2Gb memória, o Vista é escolha certa.

Bem, aqui você encontra diversas ferramentas úteis, como por exemplo um item contextual, que é quando você clica com o botão direito em alguma pasta ou arquivo, é que permite que você incie um command prompt a partir da pasta selecionada. Isso sem falar nos outros, mas aí, vou deixar para vocês descobrirem…

Abraços…

Chilá!@!

More Posts Next page »