sexta-feira, 19 de dezembro de 2008

Universos Paralelos

Quem comprar a revista Mundo .NET deste mês poderá conferir a matéria do meu amigo Leandro Magnani sobre o Parallel Extensions do .NET Framework 3.5.
Esta extensão permite o uso de processamento paralelo, ou seja, a utilização de múltiplos núcloes na execução de rotinas, otimiando ao máximo o desempenho já que hoje em dia são raras as máquinas que não dispõe de mais de um núcleo.
Recomendo a leitura do artigo jjá que paralelismo é um dos principais pontos de melhoria e implementações do novo framework 4.0 previsto para 2010.

quinta-feira, 27 de novembro de 2008

Os bons, os maus e a gente

No dia 22/11/2008 foi realizada a segunda reunião do rupo de Arquitetura DotNet Architects, o qual tive o prazer e a satisfação de participar. Nele conheci pessoas e tive a grande oportunidade de rever meu ex chefe e grande amigo Leandro Daniel.
Apesar do tema foco ser o desenvolvimento ágil de aplicações, e o SCRUM, conseguimos conversar sobre diversos outros assuntos, definimos alguns direcionamentos para o grupo e tivemos um almoço bem divertido ao final.
Mas uma das conversas que tive com o Leandro, e que meio que se repetiu durante todo o dia por outras pessoas de alguma forma, é a pouca quantidade de bons profissionais no mercado, oque nos leva a sempre acabar encontrado os mesmos profissionais por onde nós passamos.
Lembro perfeitamente da frase “Não me assustaria se um dia trabalhássemos juntos novamente” que o Leandro me disse outro dia no MSN e em uma das discussões, não recordo agora quem disse, falou “Já é difícil achar bons desenvolvedores, imagina um com skils de análise, comunicação com usuário e afins”.
Concordo plenamente com ambos. Infelizmente nosso mercado foi pulverizado com pessoas que “não tem a cara da TI”. A promessa de dinheiro fácil e trabalho abundante remete aos migrantes que saem lá de suas terras e vem para as capitais AP rocura de uma vida melhor.
Mas como em tudo na vida, a demanda acima da procura causa problemas sérios como a desvalorização do trabalho, a queda da qualidade, a mancha na reputação dos profissionais da área, dentre outros.
É por isso que acabamos mudando duas, trez vezes de empresa, e de repente nos pedem uma indicação, você sempre tem aqueles quatro ou cinco amigos para indicar pois o conheceu em outras oportunidades e sabe o quanto são competentes. Ou então você está analisando um currículo, vê que a pessoa passou por auqele lugar, e logo liga para alguiem que esta lá para saber se aquele profissional realmente atenderáas expectativas.
Então cada dia mais vejo que temos de ser profissionais diferenciado, temos de ter sempre em mente cultivar não só nosso salário como as relações de trabalho, afinal, todos queremos estar dentro da lista dos “poucos e bons profissionais que eu conheço”.

Até o próximo post

terça-feira, 18 de novembro de 2008

Tome dois parâmetros e me ligue pela manhã

Primeiramente gostaria de pedir desculpas pela demora nos posts mas como estas ultimas semanas foram um pouco corridas, não tive muito tempo para passar por aqui. Mas como teremos um belo feriado pela frente, é capaz que eu consiga colocar minha vida na linha novamente.
O titulo se refere a duas técnicas bem interessantes que utilizei esta semana no trabalho: Chamadas Assincronas de Métodos e os famosos Callbacks.
Muitas vezes nos deparamos com situações em que precisamos executar diversas tarefas ao mesmo tempo, e ha casos em que por exemplo precisamos chamar um serviço e não queremos bloquear a aplicação ou a interface com o usuário esperando a execução do mesmo. É ai que entram as chamadas assincronas. Quando utilizamos esta técnica, o método é chamado em uma thread separada e a thread principal continua livre para coninuar fazendo seu trabalho.
Tá bom, mas o que isso tem tem de diferente do método tradicional onde nós mesmos criamos as threads? Bom duas coisas: o .NET tem uma implementação mais simples e mais limpa, e temos muito mais facilidade na passagem de parametros.
Quando utilizamos apenas as chamadas assincronas, executamos esse método nesta nova thread e não temos a menor idéia do que aconteceu. Para termos este controles podemos ou segurar a thread principal, ou utilizarmos os Callbacks.
Um clalback é um método que é passado como parametro na chamada assincrona e é executado assim que o mesmo finaliza. Com ele podemos pegar todos os parametros passados, e os retornados dando assim total controle do que aconteceu.
Ai voce me perunta: Ué, mas a gente não viu isso em algum lugar? Ahã. Se voce ja gerou um Proxy de Web Service no Visual Studio, la dentro estão todas as chamadas assincronas dos seus métodos. Vejamos como isso funciona.

criamos primeiro um delegate com a assinatura que queremos chamar

public delegate bool DelegateAssincrono(string param1, int param2, bool param3);

criamos o método que ira ser executado. Este método é um método normal e não vou colocar um exeplo aqui.

Para chamarmos o método de forma assincrona é tão simples como comprar pão na padaria:

DelegateAssincrono delAssinc = new DelegateAssincrono(nossoMetodo);
delAssinc.BeginInvoke(param1, param2, param3, null, null);

Uau simples né. E se quisessemo um callback?

delAssinc.BeginInvoke(param1, param2, param3, callBackAssinc, null);

E o método callback

private void callBackAssinc(IAsyncResult result)
{
AsyncResult ar = (AsyncResult)result;
DelegateAssinc delAssinc = (DelegateAssinc)ar.AsyncDelegate;

bool retorno = delAssinc.EndInvoke();
}

Pretendo escrever um artigo sobre este assunto, por isso não estou colocando muitos detalhes aqui. Maiores referencias podem ser encontradas no Code PRoject procurando pelas palavras chaves Assync Invokation.

Até o próximo post!!!!!

quarta-feira, 12 de novembro de 2008

Quem ainda trabalha com COM+ ta legado!

A necessidade de interoperabilidade entre aplicações sempre foi algo que gerou muita dor de cabeça para muita gente. Fazer com que sistemas distintos, escritos muitas vezes em linguagens completamente diferentes sempre tiveram a necessidade de trocar "mensagens" entre si. E para isto surgiram os mais diversos tipos de soluções, algumas "caseiras" e "proprietárias" outras que viraram padrão de mercado.
Se hoje temos WCF, REST, Web Services, SOAP, HTTP e milhares de outras siglas para os padrões de interoperabilidade de hoje, num passado não muito distante era COM, derivado do OLE e do MTS, estes criados mais remotamente ainda nos anos 90.
Usado por 10 em cada 10 sistemas escritos em VB, ASP e outras linguages Win32, era componente principal da arquitetura DNA da Microsoft.Além da programação orientada a objeto, ou quase, este modelo de aplicação componentizada permitia escalabilidade, isolamento da camada de negócios, segurança, controle transacional, pool de objetos. PRaticamente tudo que um Application Server precisava oferecer a nós simples mortais.
Com o surgimento do .NET essa tecnologia se tornou obsoleta, ao menos em parte, ja que é o meio mais curto de comunicação entre os novos sistemas e os sistemas legados. O problema é que ela é uma herança maldita, ja que sua programaçlão e gerenciamento é totalmente diferente dos recursos que temos hoje. E o pior é que quando se procura material decente a respeito disto, temos poucos muito poucos artigos bons na net.
E por que tanta revolta? Esta semana estava envolvido em um projeto que necessitava de total interação com o Component Services, e perdi mais de dois dias apenas fazendo pesquisas que não me levavam a uma resposta final, até que hoje, ao pedir ajuda a um amigo, consegumos resolver em pouco mais de 20 minutos.
Mas com isto consegui quatro coisas:

1) Aprender, e aprender muito sobre esta tecnologia e seu gerenciamento;
2) Lembrar que quando estamos focados demais em um problema, as vezes é mais fácil pedir ajuda para que alguem de fora nos mostre os caminhos que ainda não percorremos;
3) Que o Google ajuda, mas que sempre devemos ter alguns poucos e bons sites na manga;
4) Que mais que estudemos novas tecnologias, sempre teremos um legado chato pra nos dar bons e novos desafios de ve em quando;

Até o próximo post

segunda-feira, 10 de novembro de 2008

E o mundo dá voltas

Faça o que eu falo, não faça o que eu faço, esse deve ser o lema dos desenvolvedores do Google, principalmente os do Chrome, navegador lançado recentemente pela empresa.
Por que estou dizendo isso? Neste post: http://www.hanselman.com/blog/TheWeeklySourceCode33MicrosoftOpenSourceInsideGoogleChrome.aspx é apresentado que foi utilizada em sua engine (do Chrome) uma biblioteca open source da Microsoft. É isto ai, um projeto de uma empresa que se diz "purista" e que prega que a Microsoft é o demonio encarnado em forma de empresa, usando código da rival.
Não acho que eles estejam errados em utilizar o código, afinal pra que reinventar a roda? por que não utilizar algo que é bom, esta pronto, e que nos é fornecido com código para que possamos contribuir? Não sou contra o Open Source, muito pelo contrário, sou fã de inumeros projetos. A unica coisa que não consigo concordar é quando estes projetos, quando começam a ganhar destaque, atacam os produtos pagos como se usa-los fosse um pecado capital.
Acho que a palavra certa é colaboração. Acho que é pra isso que serve a comunidade Open Source, para que todos possam colaborar entre si e chegar a um produto final maduro e estável. Mas isisso não quer dizer que ele é melhor ou pior que um produto pago, mas sim uma opção de custo menor.
Mas devemos lembrar que como desenvolvedores de software, somos pagos por nosso trabalho. Se ganhamos pelo código que desenvolvemos, nada mais justo que as empresas que desenvolvem e vendem software recebam por ele. Concordo que nem sempre os preços são acessíveis, nem sempre são justos, mas pagamos o preço de piratiar, afinal, é necessária a venda de muitas cópias para o pagamento dos custos, e como nem sempre isso acontece, o preço acaba sendo repassado para as poucas unidades vendidas.
São os dois lados da moeda, por isso antes de tomar partido por um ou outro lado, analise. Será que não é melhor tomar partido dos dois e conviver com o melhor dos dois mundos?

Até o próximo post

quarta-feira, 5 de novembro de 2008

Não aguenta, toma late binding

De cada quatro artigos que li recentemente sobre a nova versão doNET Framework (4.0) prevista para 2010 juntamente com a nova versão do Visual Studio fala sobre um novo recurso da linguagem C#: dynamics.
Dynamics nada mais é que um recurso já conhecido dos desenvolvedores VB.NET: o late binding, ou seja, você pode utilizar um objeto dinamicamente sem conhecer seu tipo.
Este recurso é muito utilizado na interoperabilidade COM, quando não se quer uma ligação forte com um determinado componente, evitando assim que sua aplicação não inicie por falta de uma determinada dependência.
Este recurso está sendo adicionado para atender os novos planos de integração maior entre o C#, JScript e COM, tornando quase que transparente a integração entre estas tecnologias.
Sua implementação é simples, sendo necessária a adição de um novo keywokd na declaração da variável: dynamic. Para
Para utiliza-lo, pelo que entendi, o objetos devem implementar a interface IDynamicObject, ou descender do tipo Dynamic.
Vamos esperar a coisa amadurecer e ver se finalmente teremos paz quando utilizarmos COM+

Até o próximo post.

segunda-feira, 3 de novembro de 2008

O que a Ferrari nos ensinou este ano

Mais uma temporada de Formula 1 chega ao final, mais um piloto recebe o titulo de campeão, mais uma construtora recebe o titulo de campeã. Parece tudo igual, certo? Errado.
Este ano pudemois aprender muito com a Ferrari e com nosso novo idolo Felipe Massa. Em um ano em que a competitividade mostrou-se ainda mais acirrada, tivemos lições importantes que devemos levar para o nosso dia-a-dia.
Massa nos mostrou que não devemos perder a calma diante dos momentos dificeis. Que devemos estar sempre em busca do nosso melhor e que devemos estar preparados para lutar até o ultimo segundo.
Da mesma forma a Ferrari nos mostrou que não é porque temos a possibilidade de usar uma nova tecnologia que a devemos usa-la. Foi com o novo "aviso" ao piloto de que o pit stop estava concluido que Massa perdeu precisoso pontos, que poderiam ter decidido o campeonato a seu favor. Isto nos lembra que toda cautela é pouca quando testamos algo novo, e devemos ter muita segurança ao coloca-la em produção.
Esta falha tambem nos lembra que estamos o tempo todo dependentes do fator humano, e este é decisivo no sucesso ou fracasso de uma atividade. Não adianta a melhor arquitetura, a melhor tecnologa se a pessoa que ira implementa-la não está preparada. Não adianta a melhor solução se no fim o nosso usuário não for uma pessoa adequadamente treinada para usá-la.
Pudemos aprender na ultima corrida que devemos estar preparados para tudo. Um dia de sol não é garantia de que não haverá chuva. E somos testados a todo momento para saber quaol o melhor pneu a usar. Temos de estar atentos até o ultimo segundo, pois uma unica curva pode definir nosso destino. E nunca, nunca mesmo devemos desanimar diante das adversidades.
Tenho certeza que a Ferrari, e o Massa, levarão lições valiosas deste campeonato para toda a sua carreira. E nós podemos pegar carona nesta nova jornada que se inicia.

Até o próximo post

sábado, 1 de novembro de 2008

ASP.NET MVC

Apesar de ja ter ouvido falar ha algum tempo, só agora tive coragem de fazer alguns testes com a versão Beta do ASP.NET MVC.
Tinha um pouco de receio devido as minhas experiencias com frameworks MVC para Java. Apesar de bons e bem conhecidos, eles tinham mais linhas de configuração nos XMLs que linhas de código de programação em si.
Este foi de fato meu primeiro encantamento pela abordagem da Microsoft. Fiz uma pequena aplicação de Carrinho de Compras sem necessitar editar 1 unico arquivo de configuração. A abordagem de transformar os métodos publicos da classe Controller em URLs fáceis sem a necessidade de configurações me deixou bem contente.
A transferencia de informações entre o Controller e as visões tambem é bem intuitivo, e por falar em Visões o modelo de programação se assemelha mais ao antigo ASP, onde são misturados códigos HTML, JavaScript e server side dentro das tags <% %>.
Ainda tenho algumas coisas para estudar, mas ja vi inumeros pontos positivos na abordagem MVC da Microsoft, e acho que muita coisa boa virá nas próximas ~versões.
Agora se voce está se perguntando o que é melhor: Web Forms ou MVC, eu te dou a mesma resposta que dei a um amigo: martelo ou chave de fenda? Cada situação requer uma ferramenta especifica e só uma boa nálise do problema definirá sua solução.

Bom pessoal até o próximo post.

Com a cabeça nas nuvens

Meu primeiro posto não poderia ser sobre outra coisa senão o assunto da semana, veiculado em massa por praticamente todos os canais de tecnologia do mundo: o anuncio do Azure e do Windows 7 no PDC da Microsoft, que aconteceu esta semana na Califórnia.
Não dá para negar que a Cloud Computing, ou computação na nuvem, é o tema do momento. A Microsoft e a Google, como sempre, começam a mostrar suas armas que serão utilizadas por nós desenvolvedores para mais uma vez mudar o mundo como o conhecemos.
Software como Serviço, um sonho a muito desejado começa a ganhar forma, e novos desafios começarão a ser lançados para nós. Mas como tudo que é novo, devemos usar com cautela e esperar as coisas se definirem melhor antes de começar a atirar nesta ou naquela direção.
Ainda estou na fase de estudos do do que foi lançado esta semana (Azure, Visual Studio 2010 e .NET Framework 4 CPT), mas tentarei ao máximo postar aqui meus avanços e poderemos trocar idéias e opiniões a respeito.

Fica aqui meu agradecimento pela visita, e aguardo voces no próximo post.