Últimas Novidades

01/01/2011

Resources .AXD Encriptados, uma dor de cabeça!

Primeiro post de 2011! Bom deixa eu antes desejar a todos os leitores um grande ano com muitas conquistas e felicidades, esse ano promete ein!
Para o assunto deste post vou abordar um pequeno problema que encontrei em meu dia-a-dia de desenvolvedor, o cenário é o seguinte, ao publicar para produção um sistema desenvolvido e ativar o log de mensagens de erro da aplicação comecei a receber diversos avisos deste tipo:

Server Error in '/' Application.
The resource cannot be found.
Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly.
Requested URL: /WebResource.axd

Ok, nosso sistema utiliza diversas bibliotecas de controles como Ajax Control Toolkit, controles desenvolvidos por nós mesmos, bibliotecas de validação, entre outras, todos adicionando suas referencias a JavaScript/CSS/Imagens nas páginas passando pelo WebResource.axd urls encriptadas. Agora como saber quais são estes arquivos que estão sendo solicitados e encontrar o causador ou os causadores de problemas? Após um pequeno periodo pensando como desencriptar tais resources afim de resolver o problema, pesquisando algoritmos para realizar tal operação sem sucesso, foi então que surgiu a idéia “Opa, como o framework faz isto e busca o arquivo para retornar ao usuário?” foi então que após uma outra pesquisada descobri que a própria classe Page (System.Web.UI) possui um método chamado DecryptString usado para desencriptar os resources, “ótimo” deve estar pensando você, basta chamar este método e passar a url e está resolvido. Infelizmente não foi tão simples assim porque tal método até por segurança do framework possui o modificador private internal e foi ai que surgiu uma idéia perigosa “Reflection!” ótimo, um pouquinho de código e estamos prontos para “burlar” os modificadores de acesso e invocar tal método:

System.Reflection.MethodInfo decrypter =
    typeof(System.Web.UI.Page).GetMethod("DecryptString", 
      System.Reflection.BindingFlags.NonPublic | 
      System.Reflection.BindingFlags.Static);
decrypter.Invoke(null, new object[] { resource }) as string;

Perfeito porém perigoso, mais como será um uso pontual e não permanente no sistema está ótimo, até agora conseguimos acesso ao método e supostamente desencriptar qualquer resource recebido, próximo passo é resolver o problema que apenas ocorria em ambiente de produção, esta parte foi simples, bastou adicionar um pequeno trexo no arquivo Global.asax e interceptar todas as requisições a scripts AXD encriptados, em seguida, desencriptar os mesmos e persistir em um arquivo de texto para posterior conferência. Deixo abaixo o código final para quem possa ser útil:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    if (Request.Path.ToLower().Contains(".axd"))
    {
        System.Reflection.MethodInfo decrypter =
            typeof(System.Web.UI.Page).GetMethod("DecryptString",
              System.Reflection.BindingFlags.NonPublic |
              System.Reflection.BindingFlags.Static);
        string decryptResource =
            decrypter.Invoke(null, new object[]
              { Request.QueryString[0] }) as string;
        using (StreamWriter logWriter =
              File.AppendText(@"C:\LogResources.txt"))
        {
              logWriter.WriteLine(string.Format("Request: {0}", 
                 Request.Url));
              logWriter.WriteLine(string.Format("Resource: {0}{1}",
                 decryptResource, Environment.NewLine));
              logWriter.Flush();
        }
    }
}

Por fim teremos um resultado como demonstro ao final deste post e o problema foi resolvido, descoberto qual era o JavaScript que não estava sendo encontrado em um dos componentes desenvolvidos internamente, este foi adicionado e sem mais logs de erro.

Request:http://localhost:8988/ScriptResource.axd?d=SrZH9-4Isg-NAqBq8yWrNRnp34xITrUZuNm4IBv339RYmO1cI0UwWdQn633PMBmq4BZZOeovHwzGvGybPFrFskG62PGue1bgzM-_mP-0WUzDpbECYCexsYzMyX2uAoXhfLm5yBrLABi43VfM815DyA2&t=ffffffffbd2983fc
Resource: ZAjaxControlToolkit|MicrosoftAjaxWebForms.debug.js|

Request:http://localhost:8988/ScriptResource.axd?d=y-j1i-XIxMTkLgkn_PpO8XPN9C90ktyk4wGeo6T4bRWOAWqAaGLMpB6sY8jJJvZ4Vurn_-5K3EOvLMcFyTFg0Ce4nKud3ugO5kWXIKSyVikEJbjOgceWDLO5fAxeM1du83YkidWWGOh1aFD04H3q6w2&t=ffffffffbd2983fc
Resource: ZAjaxControlToolkit|MicrosoftAjax.debug.js|

Um abraço e novamente um Feliz 2011 a todos, primeiro de muitos!

leia mais...

17/09/2010

Internet Explorer 9 – Funcionalidades para Desenvolvedores – Parte 1

imagePessoal lançado essa semana o Internet Explorer 9 trás com ele novas funcionalidades muito interessantes para os desenvolvedores, como destaque vou abordar neste post a excelente integração dos sites com as funcionalidades do Windows 7, trazendo cada vez mais a Web para o Desktop.

Bom vamos lá, a primeira funcionalidade que demonstrarei será a de Pinned Sites, ou seja, a opção de “Pinar” (ou em bom português: Fixar) o site atual na sua barra de tarefas do Windows, e com isso passar a contar com um menu de Contexto personalizado pelo site que foi fixado, além de ajustar as cores dos botões do navegador para uma cor mais condizente com nosso site, além da exibição do ícone do mesmo no canto superior/esquerdo tornando nosso site mais integrado e com uma cara de aplicativo.

Bom vamos lá, para quem ainda não entendeu e gostaria de um exemplo pode fixar meu blog (esta página) e clicar com o botão direito no ícone fixado, para fixar é simples utilizando o Internet Explorer 9 clique na aba relativa a meu blog, segure, e arraste até sua barra de tarefas do windows, irá aparecer a mensagem “Fixar em Barra de Tarefas”, então basta soltar e está fixado.

É uma tarefa relativamente simples realizar todas estas integrações com o Windows, estão disponíveis novas meta tags para isto que são as responsáveis por informar o navegador sobre as opções do site e o mesmo ativar tais funcionalidades:

<meta content='Eduardo Ordine Blog' name='application-name'/> 
<meta content='Blog DEV Eduardo Ordine' name='msapplication-tooltip'/>
<meta content='width=1024;height=768' name='msapplication-window'/> 
<meta content='#333333' name='msapplication-navbutton-color'/> 

Vamos analisar inicialmente as principais metas, notem que basta definir o name para o item desejado e em content colocar o conteúdo assim como faziamos com outras metas existentes hoje em dia.

application-name Nome da aplicação (seu site) a ser mostrado tanto no menu inicial quanto no título da janela ao passar o mouse no ícone da barra de tarefas.
msapplication-tooltip Auto-explicativo, contém o valor que sera exibido da tooltip do ícone na barra de tarefas.
msapplication-window Define o tamanho e demais opções relativas ao comportamento da janela do navegador que será aberta ao clicar no ícone fixado.
msapplication-navbutton-color Também auto-explicativo, contém a cor em hexadecimal a ser adicionada aos botões do navegador ao lançar o site através do ícone fixado.

Bom até agora já transformamos nosso simples site em uma aplicação e a mesma já pode ser fixada tanto na barra de tarefas quanto no menu iniciar, caso vocês testem nesse momento irão notar que ficou meio feio apenas com nome e tooltip mais com o icone padrão do Internet Explorer. Vamos melhorar um pouco isto, podemos definir dois icones um para ser exibido na barra de tarefas e outro para aparecer no navegador na parte superior.

<link href='icone.ico' rel='shortcut icon' type='image/x-icon'/> 
<link href='icone.ico' rel='icon' type='image/ico'/> 

Apenas clareando os comandos acima, adicionamos dois itens link em nossa página um com seu rel (relativo) definido como icon e outro como shortcut (atalho) além do endereço para o icone desejado. A seguir você confere o resultado final:

image

Agora que nosso site já está devidamente fixado na barra de tarefas, e com um design agradável, podemos incrementar ainda mais, com outra feature do IE9/Windows 7 chamada de lista de tarefas, percebam que a maioria dos aplicativos Windows hoje em dia já possui esta caracteristica de exibir ao clicar com o botão direito no icone da barra uma lista de tarefas corriqueiras/comuns ao usuário. Agora podemos adicionar tal lista não apenas em aplicativos windows mais também em sites da web.

Para isto contamos com mais uma meta tag muito simples:

<meta content='name=Titulo;action-uri=http://url;icon-uri=icone.ico' name='msapplication-task'/> 

Exemplificando a meta acima, assim como as demais definimos a propriedade name contendo o valor msapplication-task informando assim ao navegador que este será um item da lista de tarefas, e no content definimos o name com o titulo da tarefa, o action-uri contendo a url para onde nossa ação de clicar na tarefa nos levará e por fim o icon-uri contendo o icone relativo a tarefa desejada. Lembrando que como se trata de uma lista de tarefas ou seja podemos adicionar diversas metas como esta variando apenas o titulo e a ação. A seguir você confere o resultado:

image

Esta foi a Parte 1 de uma série de posts que farei sobre as Funcionalidades para Desenvolvedores do Internet Explorer 9, isto é apenas a ponta do iceberg, ainda pretendo fazer mais duas postagens abordando funcionalidades mais avançadas disponíveis neste primeiro Beta. O Internet Explorer 9 está absolutamente fantástico, abordando os padrões W3C, HTML5, CSS Selectors além da tão aguardada aceleração gráfica via GPU.

Lembrando que tanto estas meta tags quanto os nomes de propriedades e valores podem ser alterados após o lançamento da versão final, mais podemos ir por enquanto nos acostumando, adaptando nossos aplicativos e testando nesta versão Beta.

Por hoje é só, e quem estiver com alguma dúvida, sugestão ou elogio pode deixar nos comentários abaixo ou enviar via email que respondo com o maior prazer. Curtiu? Retwit ;D

leia mais...

10/09/2010

MCPD Enterprise Application Developer – Upgrade 2.0 para 3.5

Boas pessoal, hoje vou falar um pouco sobre certificações Microsoft, mais voltado para o pessoal que busca uma atualização das que ja possui atualmente. Para isto vou usar meu caso, possuo todas as certificações da linha de desenvolvimento utilizando o Framework 2.0 que é/era até ano passado o mais utilizado em minha empresa e com certeza deve ser a de muitas por ai ainda, mais ao analisar o mercado vemos que a Microsoft acaba de lançar a poucos meses a versão 4.0 de seu Framework de desenvolvimento, ainda acho meio precipitado cair de cabeça nos estudos da 4.0 e em provas que acabaram de sair do estágio de Betas, com pouco ou até nenhum material disponível. Como o projeto que estou atualmente foi migrado para framework 3.5 (por mim =D) e novos projetos estão todos tendo por base esta mesma versão resolvi que seria o momento ideal para realizar uma atualização de minhas certificações, para isto não é necessário retirar todas as provas novamente (até porque da área de desenvolvimento são 4 TS`s¹ e 3 PD`s²), para quem já possui a certificação MCPD EAD³ a Microsoft disponibiliza caminhos de Upgrade da versão 2.0 para 3.5 e também posteriormente da 3.5 para 4.0.

Bom vamos falar um pouco sobre esse processo de Upgrade, ao invés de realizar 5 provas (4 TS`s¹ e 1 PD²) para atualizar seu EAD³ para 3.5 basta realizar um processo separado em duas provas/partes e obter todos os 5 títulos desejados.

Hoje realizei a parte 1 do processo, exame de número 070-568, por ser uma prova que engloba o assunto de todos os títulos pretendidos realmente achei mais complexa que todas as outras que havia feito até hoje. Ela é composta por 60 questões e 3 horas e 30 minutos de duração, dividida em 3 “sub-provas” de 20 questões cada com 1 hora e 10 minutos para cada etapa. Confesso que ao chegar a terceira “sub-prova” meu cérebro já estava totalmente esgotado, mais segui em frente e obtive uma pontuação satisfatória, após a aprovação neste primeiro teste obtive como resultado os títulos:

MCTS: Microsoft .NET Framework 3.5 – Windows Forms Application Development
MCTS: Microsoft .NET Framework 3.5 – ADO.NET Application Development
MCTS: Microsoft .NET Framework 3.5 – ASP.NET Application Development

Equivalentes respectivamente aos exames 70-505 / 70-561 / 70-562. (3 em 1)

Já a segunda parte do processo é o exame de número 070-569, que se tudo correr bem realizarei no mês que vem (Outubro) onde obterei os demais títulos:

MCTS: Microsoft .NET Framework 3.5 – Windows Communication Foundation
MCPD: Microsoft .NET Framework 3.5 – Enterprise Application Developer

Equivalentes respectivamente aos exames 70-503 / 70-565. (2 em 1)

Por fim se tudo ocorrer conforme planejado atingirei meu objetivo inicial de atualizar todas as MCTS de 2.0 para 3.5 além do título MCPD EAD de 2.0 para 3.5 também. E dai rumo a versão 4.0!

Bom gostaria de compartilhar estas informações, e quem for realizar tais provas e quiser trocar umas idéias ou tirar dúvidas do processo pode deixar um comentário ou via email, sem mais, obrigado e até a próxima.

[1] Microsoft Certified Technology Specialist
[2] Microsoft Certified Professional Developer
[3] Enterprise Application Developer

leia mais...

10/07/2010

Microsoft Certified Trainer - 2010

Microsoft Certified TrainerBom dia pessoal, é com grande felicidade que venho anunciar oficialmente que acabo de obter o título e competências de MCT (Microsoft Certified Trainer). Primeiro vou deixar meus agradecimentos especiais ao Márcio Rossato, Edson Dewes e em especial para Roseli por me auxiliar durante todo processo de inscrição e obtenção.

Apenas para quem não sabe muito bem o que é vou dar uma breve introdução, MCT é um título que não se obtém através das tradicionais provas como os demais títulos que possuo, e sim através da demonstração de conhecimento e ministrando cursos sobre tecnologias Microsoft e análise de Currículo e Histórico. Este título me credencia a ministrar Cursos Oficiais Microsoft (MOCs), com materiais de treinamento e máquinas virtuais disponibilizadas pela própria Microsoft em seu Course Library além é claro de uma série de benefícios e reconhecimentos.

Para maiores informações (em inglês):
http://www.microsoft.com/learning/en/us/certification/mct.aspx

Welcome Kit MCT 2010Carteirinha MCT 2010

leia mais...

02/05/2010

Tricks – Trabalhando com Componentes ASP.NET em Client-Side

Boas pessoal, finalmente algum tempo livre para dedicar ao blog, hoje inauguro uma nova seção aqui que chamei de ‘Tricks’ que traduzindo significa Truque/Artifício/Artimanha, enfim acho que já deu para entender, será uma sessão dedicada a posts rápidos abordando temas simples e úteis.

Para nosso primeiro post da seção Tricks, vamos discutir um ponto que quando tocado muitos devs tendem a travar na hora de desenvolver, todos já passaram por alguma situação onde temos nossos lindos componentes TextBox / Label / Panel entre outros e queremos recuperar ou alterar seus valores ou propriedades visuais via Client-Side (lado cliente da aplicação) via JavaScript. Eu mesmo já presenciei diversos pogs artificios técnicos para realizar tais ações, vamos ao nosso cenário:

 Código ASP.NET
image

HTML Gerado
image

Supondo que nosso site é composto de uma MasterPage e uma página ASPX que utiliza tal Master com nossos componentes, confome código ASP.NET acima, o HTML gerado para o browser será o da listagem acima também, podemos ver que a parte que mais nos importa para acharmos tal controle via Client-Side que é o ID (identificador do elemento) é gerado automaticamente pelo Framework com base na hierarquia de componentes, e a situação fica ainda pior caso utilizemos GridViews / DataLists entre outros. A seguir algumas formas comumente utilizadas por desenvolvedores para recuperar tais componentes via Client-Side e suas desvantagens:

 Maneira 1:
image
 Desvantagem: Não preciso nem citar que esta é uma das piores maneiras possíveis, pois caso seja alterado o nome de algum componente pai, contido na MasterPage ou na Página teremos que realizar um baita Refactor em nosso código JavaScript corrigindo os IDs fixos ali contidos.

  Maneira 2:
image
 Desvantagem: Esta maneira já é em muito melhor que a primeira citada, onde em tempo de render da página os valores gerados pelo framework serão incluidos em nosso JavaScript, o problema aqui é que nosso código JavaScript necessita obrigatóriamente estar contido dentro do fonte da página ASPX não podendo ser separado em um arquivo .JS a parte.

Estas maneiras acima eu já cancei de ver em Projetos em que faço parte, inclusive alguns bem críticos e causando bastante dores de cabeça. Agora vamos a solução? Apenas uma paravra para vocês: JQuery!!! Não é atoa que a Microsoft está apoiando fortemente o projeto e inclusive incluiu o mesmo no Framework 4.0 / Visual Studio 2010.

 Solução:
image 

Vejam que solução elegante, basta adicionar a referência a api do jquery (download em www.jquery.com) e fazer uso da mesma. Vamos a explicação, o simbolo de $ significa uma chamada a implementação do jquery equivalente ao getElement do javascript tradicional, entre parenteses está o que chamamos de Selectors, podem ser expressões bem complexas, buscar diversos elementos de uma só vez, buscar elementos pelo seu estilo CSS, pelo seu tipo, pelo seu estado, enfim, é o coração da api. Em nosso exemplo estou buscando elementos onde o ID termina ($= – Expressão Regular) em… e a seguir utilizamos métodos fornecidos pela API para alterar CSS, mudar o conteudo html e o valor, além de diversos outros.

Está foi uma abordagem simplista de como utilizar o JQuery para simplificar tarefas em nosso dia-a-dia como desenvolvedores ASP.NET. Espero que tenham gostado, e sigam o lema do JQuery que considero demais “Write Less Do More”, traduzindo: Escreva Menos e Faça Mais, porque é o que sempre digo: se seu código está grande e complicado é porque você está fazendo errado!

Um abraço a todos e até a próxima.

leia mais...

07/04/2010

Microsoft Students to Business / Google Code Jam 2010

Google
         Code JamFala pessoal, venho hoje divulgar rapidinho dois grandes eventos que iniciaram suas inscrições, 2010 é O ano pelo jeito ein! Muitos eventos Microsoft rolando, comunidade mandando ver!

Bom primeiro sobre o Google Code Jam, para quem não conheçe uma breve introdução, é um concurso realizado a cada ano pelo Google que tem como propósito progração, lógica e resolução de problemas. É separado em diversas fases classificatórias, e a cada etapa os problemas vão complicando, ou seja, o Google elabora um problema e fornece dados de input (entrada) para seu programa / algoritmo que deve processar e fornecer um arquivo de output (saida), este arquivo de saida deve ser submetido ao site do Code Jam que avaliará se os outputs estão corretos, além de submeter também o fonte de seu programa. Pode ser utilizada qualquer linguagem de programação e os premios são bastante tentadores ($100 à $5.000). Bom espero vocês lá para trocarmos figurinhas, já estou inscrito e é claro que como no ano passado minha linguagem de programação utilizada será o C#!

Inscrições e mais Informações
http://code.google.com/codejam

Microsoft Students to BusinessAgora rapidinho sobre o Microsoft Students to Business, este já é um velho conhecido de todos, é um programa de capacitação com apoio da Microsoft e realizado pelo Centro de Inovação aqui de Curitiba com propósito de capacitar proficionais para entrada no mercado de trabalho. Eu realizei a um bom tempo atrás (3 anos), já fui instrutor em uma das edições e sigo recomendando fortemente, a seguir flyer de divulgação desta nova edição.

Inscrições e mais Informações
http://www.programaS2B.com.br

Microsoft Students to Business

Por hoje é isso ai pessoal, e vamos se mexer ai, dois super eventos para se increver e participar!

leia mais...

28/03/2010

Innovation Day 2010 – IIS Smooth HD Streaming

silverlightlogo_thumb

Opa pessoal, um post rápido hoje apenas para agradecer a todos que compareceram ao Microsoft Innovation Day Curitiba neste sábado (27/03), exelentes palestras, ótimo conteúdo, e profissionais de primeira.

Fiz uma participação especial na palestra do Márcio Gomes sobre IIS Smooth Streaming no Silverlight (Obrigado pela Oportunidade), realizando uma demo de Live Streaming utilizando o Microsoft Expression Encoder 3. Espero que tenham curtido e em caso de dúvidas podem me escrever que terei maior prazer em responde-los.

Disponibilizo aqui os slids da Apresentação sobre esta tecnologia para quem não foi por algum motivo e até para os que queiram aprender mais ou apenas conferir o Smooth Streaming.

Download da Apresentação

IIS Smooth HD Streaming.pptx
Videos que se Adaptam ao Espectador
Eduardo Ordine / Márcio Gomes

Também conforme prometido disponibilizo a seguir alguns links úteis para quem deseja se aprofundar nesta tecnologia além de um preview online da demo apresentada pelo Márcio sobre controle de banda adaptativa. Obs. Todo o material está em inglês.

imageIntrodução ao Smooth Streaming
imageDemo sobre Banda Adaptativa Online
imageAdaptive Streaming Comparison
imageSmooth Streaming Readme
imageGetting Started with Smooth Streaming
imageExploring Smooth Streaming Bit Rate Changes
imageManaging Your Smooth Streaming Presentations
imageSmooth Streaming Deployment Guide
imageSmooth Streaming UI Help

Um abraço a todos e até o próximo evento da Comunidade Microsoft!

leia mais...