Qual a sua opinião sobre programação mais controversa?

05/11/2011 08:04:00 By Felipe Pessoto

Uma pergunta feito pelo Jon Skeet, no Stack Overflow, "What's your most controversial programming opinion?".

Há algumas bem interessantes, da até pra fazer uma lista "TODO" para ser um programador melhor.

A mais votada acho que é a mais importante, e tem por consequência a maior parte das outras: "Programmers who don't code in their spare time for fun will never become as good as those that do." Se você programar apenas pra se sustentar vai estar sempre limitado ao que te mandam fazer e dificilmente vai evoluir como quem realmente gosta do que faz, isso vale em qualquer profissão. Se você gosta do que faz, inclusive o faz em seu tempo livre, vai se manter sempre atualizado e aprendendo.

Read more...

Dicas para melhorar a performance no ASP.NET MVC 3

03/05/2011 02:32:00 By Felipe Pessoto

Vi o sessão sobre Performance no ASP.NET MVC 3 do mvcConf. Tem algumas dicas para melhorar a performance da aplicação sem grandes alterações:

-Nas View fortemente tipadas sempre passar uma instância do objeto em vez de null. É muito comum na Action Add passar null pra View: "return View();. O problema acontece quando se usa os HtmlHelpers que aceitam Expression Tree, Html.TextBoxFor(x=> x.Name), ele vai disparar uma exception que é automáticamente capturada, mas que impacta na performance.

-Remover View Engines não utilizadas, assim evita que o ASP.NET MVC 3 procure por Views que não existes no disco.

-Usar OutputCache onde possível

-Desisintalar UrlRewriter do IIS caso não esteja usando no servidor

ASP.NET Site Performance Secrets

01/26/2011 21:47:00 By Felipe Pessoto

Hoje terminei de ler este livro, ele é recente, lançado em Outubro de 2010. O livro é focado em ASP.NET guiando o leitor por todos os gargalos que podem atrapalhar a escalabilidade do seu site. Chega a ser assustora a diferença entre um site otimizado para performance máxima e um mal projetado. Um exemplo de um tweet do Joel Spolsky: "Digg: 200MM page views, 500 servers. Stack Overflow: 60MM page views, 5 servers. What am I missing?". Não que o Digg seja mal projetado, pelo contrário, mas mesmo assim como é possível tanta diferença? Bem os criadores do Stack Overflow são todos referências e sabem as melhores técnicas do que se fazer ou não fazer.

Quando comecei a ler o livro achei que iria encontrar aquelas dicas básicas, de não enviar dados demais pela rede, usar CDN, etc, mas o autor aborda muito mais do que isso, até aprendi sobre alguns recursos que eu desconhecia sobre o ASP.NET. Em resumo os principais assunto são: CPU, Memória, Caching, Threads, Thread Locking, Compressão, IO, Banco de Dados, CDN, Javascript e Testes de Cargas.

As vezes acabamos esquecendo de alguns detalhes(não menos importantes) que podem comprometer toda a experiencia de uso. Por exemplo, não se preocupar com o Thread Pool/Thread Locking do ASP.NET pode fazer seu servidor demorar pra responder as requisições mesmo que não esteja usando 100% da CPU, ou códigos Javascript que bloqueiam a renderização da página. O Autor explica porquê estes problemas ocorrem e como evitá-los. Recomendo!

 

ASP.NET Site Performance Secrets
Autor: Matt Perdeck

Comprar no Amazon

Iterators

01/19/2011 15:16:00 By Felipe Pessoto

Muito antigamente, quando se programava em C# 1.0, caso você precisasse implementar as interfaces IEnumerable ou IEnumerator era necessário fazer na mão, implementando os métodos Current, MoveNext e Dispose para o IEnumerator e GetEnumerator para o IEnumerable.
O mais complicado era o MoveNext(), pois é necessário criar uma máquina de estado para saber qual resultado deve ser atribuido ao Current.
Estas interfaces são conceitos importantes no C# e na plataforma .NET em geral, o foreach funciona baseado na classe IEnumerable, chamando seu único método GetEnumerator que por sua vez retorna um object que implementa a interface IEnumerator.

Com o C# 2.0, uma nova keyword e muito trabalho do compilador, é possível simplificar tudo isso. Usando o yield return no seu método ou no get da propriedade o compilador se encarrega de criar uma classe aninhada que implementa essas interfaces pra você, controlando todos os fluxos respeitando if´s, for´s blocos finally, etc. É um trabalho enorme por parte do compilador e claro da equipe do compilador do C# que trabalhou duro no algoritmo. Hoje essa "feature" é uma das maiores no compilador do C#.

Nada melhor do que vermos o código para entender melhor como tudo isto funciona. Vou mostrar um método que retorna IEnumerator<int> e o resultado gerado pelo compilador, usando o Reflector pra isso.

Read more...