quinta-feira, 28 de dezembro de 2006

0

Introdução ao Windows Presentation Foundation

O primeiro treinamento que realizei no Microsoft Learning foi o curso Clinic 5135 AE: Introduction to Developing with Windows Presentation Foundation and Visual Studio 2005. Basicamente é uma introdução ao Windows Presentation Foundation (WPF), parte integrante do .NET Framework 3.0, mostrando qual a idéia por trás dele, como montar as primeiras aplicações, exemplificando os ganhos e as novas técnicas possíveis dentro desta tecnologia. Segue meu resumo do curso.

Dentre as idéias centrais do WPF estão a possibilidade do designer e do programador trabalharem juntos em um mesmo produto final (separação da interface do usuário das regras de negócio), sem o risco de um atrapalhar o trabalho do outro, bem como a utilização de uma plataforma estável para a criação de aplicações ricas em termos de funcionalidades gráficas ao usuário.

Boa parte dos controles são "lookless", ou seja, não possuem uma aparência intrínseca com poucas possibilidades de alteração além de cores, como ocorre nas aplicações baseadas em WinForms. Além disso, o WPF possui suporte à databinding e eventos, integrando-os a código gerenciado, se for o caso.

As definições de interface são construídas com base em um vocabulário XML denominado XAML (Extensible Application Markup Language). Para brincar com o XML diretamente, você pode baixar gratuitamente o Microsoft® Windows® Software Development Kit for Windows Vista™ and .NET Framework 3.0 Runtime Components, dentro do qual você irá encontrar o XamlPad. Com ele, é possível criar documentos XAML e imediatamente verificar o resultado e os erros encontrados. Claro que esse tipo de atividade fica mais simples com o Visual Studio 2005, mas as vezes é necessário ver para crer.

Outra informação pertinente e bem interessante é a possibilidade de interoperabilidade entre o WPF e aplicações WinForms, Microsoft Foundation Classes (MFC), Active Template Library (ATL), Microsoft DirectX e Microsoft ActiveX. Para colocar conteúdo WPF dentro de aplicações Win32, use a classe HwndSource, que provê um hwnd (lembra?) que contem seu conteúdo WPF. No caminho inverso, para reusar um controle Win32 dentro de uma aplicação WPF, use a classe HwndHost, que é um controle que faz com que o hwnds pareçam conteúdo WPF.

Fiquei bastante impressionado com a apresentação das técnicas para databinding dentro do WPF. Segue abaixo um snippet que pode ser testado no XamlPad:

<StackPanel xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<StackPanel.Resources>
<XmlDataProvider x:Key="Blog" Source="http://www.microsoft.com/windowsvista/rss.xml" />
<DataTemplate x:Key="ItemTemplate">
<TextBlock Text="{Binding XPath=title}"/>
</DataTemplate>
</StackPanel.Resources>
<Label FontSize="24" FontWeight="Bold" Content="{Binding Source={StaticResource Blog}, XPath=/rss/channel/title}"/>
<Label FontSize="18" FontStyle="Italic" Content="{Binding Source={StaticResource Blog}, XPath=/rss/channel/description}"/>
<DockPanel DataContext="{Binding Source={StaticResource Blog}, XPath=/rss/channel/item}" Height="280">
<ListBox IsSynchronizedWithCurrentItem="True" ItemTemplate="{StaticResource ItemTemplate}" ItemsSource="{Binding}" DockPanel.Dock="Left" Width="300" />
<Frame Source="{Binding XPath=link}" DockPanel.Dock="Right" />
</DockPanel>
</StackPanel>


Bom, é isso. Até a próxima.

quarta-feira, 27 de dezembro de 2006

0

Microsoft Learning Portal

Curtindo o clima de final de ano, entre desenterrar backups antigos e jogar um pouquinho de Quake1, estava navegando pelo site do Microsoft Learning e acabei descobrindo coisas interessantes.

Há bastante material de estudo e de ótima qualidade. Tem cursos específicos para as provas regulares, não sendo necessário o preparo exclusivamente garimpando links no MSDN. Além disso, tem também cursos que abordam de maneira introdutória uma série de tecnologias recentes e que ajudar a gente a dar aquele primeiro passo fundamental.

Outra coisa muito interessante, é que há muitos cursos com preços acessíveis, em torno de US$40. Mais interessante ainda, há muitos outros que são oferecidos completamente de graça, que me incentivou a olhar um pouco mais de perto.

Fiquei bastante impressionado, logo de cara, com a qualidade gráfica. O site ficou bem estruturado, se bem que é problemático você encontrar um curso pelo número e a navegação em treeview no que eles chamam de Learning Manager é bem lenta. Mas visualmente é bem agradável e está integrado com os dados contidos no site de MCP. Assim, todas as provas que você fez aparecem no site, permitindo ainda o acesso fácil à impressão do seu transcript.

Todos os cursos que são realizados no site aparecem na área My Archivements, possibilitando que o material que você utilizou ainda seja acessível, mesmo após o término do curso, mas por um tempo limitado, dependendo do treinamento.

O material dos três cursos que fiz hoje me pareceu bem homogêneo, objetivo e de simples compreensão, mesmo para pessoas não acostumadas com cursos online. Apresentações em Flash (o locutor parace que está no banheiro, mas beleza), textos simples e curtos, possibilidade de navegar de maneira não estruturada no site e avaliações pertinentes no final de cada módulo. É possível também acessar o conteúdo dos treinamentos de maneira offline, bastando baixar o E-Learning Offline Player.

Claro, todos os cursos tem pré-requisitos, que envolvem o uso de uma determinada tecnologia durante um determinado tempo, mas isso serve apenas para orientar as pessoas que não adianta querer aprender tudo da noite para o dia. De qualquer forma, fica aqui a dica. Dêem uma passadinha por lá.

segunda-feira, 18 de dezembro de 2006

0

71-445: TS: Microsoft® SQL Server 2005 Business Intelligence - Implementation and Maintenance

Fui ainda há pouco fazer a prova 71-445: TS: Microsoft® SQL Server 2005 Business Intelligence - Implementation and Maintenance que ainda está no estágio beta. A previsão que seja disponibilizada ao público em geral por volta de Fevereiro de 2007.

Novamente deixei para a última hora (não por desleixo, mas absoluta falta de tempo mesmo) e certamente não fui bem. A idéia é uma prova para falar sobre os novos recursos associados ao SQL Server 2005 para análise de dados: Analysis Services, Reporting Services e Integration Services.

Passando na prova, vc ganha a certificação MCTS: SQL Server 2005 Business Intelligence que além de ser interessante pra pessoas físicas, ajuda às empresas parceiras à obter a competência de Business Process and Integration

Como a empresa onde costumo fazer as minhas provas não tinha horários disponíveis, resolvi fazer em uma empresa aqui perto, a New Horizons. Sala apertada e quente, máquinas lentas que demoravam cerca de 45 segundos entre as questão e 15 segundos ao selecionar as alternativas, em diversos momentos da prova, sem espaço para escrever nas folhas que NÃO recebi e monitorado por uma janela de vidro que, aliás, dava para a recepção onde escutamos as portas batendo, os telefones tocando e as pessoas conversando. Enfim, um ambiente saudável, se vc não estiver fazendo prova de certificação.

Fiz meus comentários à pessoa responsável, que disse que aquela reclamação já havia sido realizada e que estão buscando soluções. Caso alguém não consiga passar na avaliação por estar em um ambiente dispersivo espero que eles tenham uma boa desculpa também.

Bom, as regras para a prova não permitem entrar no detalhe das questões, mas posso dizer que foram 70 perguntas a serem respondidas num prazo de 3h30m. Quando a prova estiver disponível, provavelmente vai baixar para 30, 35 questões em algo em torno de 2 horas.

1

Confraternização DoMore! 2006

Fomos ontem fazer a confraternização de Final de Ano da DoMore!, que aconteceu num sítio em Juquitiba, chamado Acampamento Vale Grande.

Depois do Jean chegar atrasado quase uma hora para a carona compulsória e de pegar a querida Rodovia Regis Bittencourt, chegamos ao local onde o pessoal já estava acendendo a churrasqueira. Aí ninguém perdeu mais tempo!

Café da manhã, seguido da apresentação institucional da empresa (o velho PPT do Simão). O destaque ficou por conta das fotos, com menção honrosa para a foto do orkut do Rogério.

Daí pra piscina foi, literalmente, um pulo. O campeonato de barrigada estava quase no papo quando o Fares nos mostrou como deve ser feito. Isso sem contar a performance do "Se ela dança eu danço".

Almoço básico regado à muita cerveja e churras, e depois fomos à entrega dos presentes de amigo e inimigo secreto. Fizemos o sorteio pelo site AmigoSecreto, que se mostrou bem bugado. O Aquino, desorientado, trocou os presentes do Simão e da Luciane, sem contar os diversos deadlocks no meio do processo. Acho que os sistemas de amigo secreto deveriam ser mais espertos para que não ocorressem duas séries de pessoas que não estejam interligadas. Vou ver se monto alguma coisa pro MOSS 2007 e quem sabe usamos o nosso no ano que vem.

Um pessoal foi jogar bola num campinho zuado (AFAIK) mas que permitiu a quem manja demonstrar a arte (Desenvolvedores 2 x 7 Designers, damn!). Pra não humilhar ninguém, me abstive dessa...

Mais piscina, mais cerveja, agora acompanhada pelo Black Label do Luiz e a minha querida Jurupinga. Matamos a garrafa jogando bilhar, onde o Cícero e eu éramos responsáveis por salvar as bolas que a Fabiana e a Roberta tentavam matar.

Com o gás acabando, foi o lugar de sessãozinha rápida de karaokê. Após tirar nota 100, só pra mostrar como se faz, foi a hora do banho e de seguir pra casa.

Chegamos todos bem em casa, apesar do cansaço. Agora é xavecar o pessoal pra que isso ocorra com mais freqüência!

quinta-feira, 14 de dezembro de 2006

0

74-137 : Developing Microsoft Office Solutions using XML with Office Professional Edition 2003

Preparation Guide for Exam 74-137

Developing Microsoft Office Solutions using XML with Office Professional Edition 2003







Visão geral das tecnologias do desenvolvedor do Office 2003

Microsoft Office System and XML: XML in Action

terça-feira, 12 de dezembro de 2006

1

Migração de comentários dos posts antigos

Estou aqui tentando migrar os posts antigos. O script anterior funciona bem, mas não conseguiu ajustar os labels e nem trazer os comentários dos posts. Sobre esse último item, a interface Google.GData não permite fazer como eu gostaria, que envolve manter o nome do autor original. Então tivemos que improvisar:

string blogId = "6668893451803848875"
string postId = "8836808573838150306";

WebClient client = new WebClient();
string conteudo =
Encoding.Default.GetString(
client.DownloadData(
String.Format(
"https://beta.blogger.com/comment.g?blogID={0}&postID={1}",
blogId, postId)));

string securityToken =
conteudo.Substring(
conteudo.IndexOf("securityToken") + 22, 42);
string postData =
String.Format(
"iden=Other&username=&password=&blogID={0}&postID={1}&securityToken={2}&amp;anonName={3}&anonURL=&postBody={4}&publish=true",
blogId, postId,
HttpUtility.UrlEncode(securityToken),
HttpUtility.UrlEncode("John Doe"),
HttpUtility.UrlEncode("lalala"));

client.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
byte[] responseArray =
client.UploadData(
"https://beta.blogger.com/comment.do",
"POST", Encoding.Default.GetBytes(postData));
Bom, primeiro pegamos o token de autorização na página onde o post é feito manualmente, e depois setamos os campos para refletir todas as informações do formulário, fazendo o encoding destas informações.

Os métodos HTTP GET e POST, como a imensa maioria deve saber, tem como diferença básica a presença (GET) ou não (POST) dos parâmetros de formulário no endereço da página. NO caso do POST, um tipo de conteúdo diferente é informado na solicitação HTTP, enquanto os dados do formulário vão no corpo da solicitação.

Como você já deve ter imaginado, isso permite que você interaja com qualquer tipo de formulário online, postando os dados que desejar. Bom por um lado, ruim pelo outro: é assim que os spammers conseguem obter informações de emails em diversas páginas, bem como postar de maneira indevida em blogs. Para dificultar isso, foi criado o conceito de CAPTCHA, para obter informações que "só um humano" conseguiria informar.

Voltando ao lado bom, você pode coletar informações de outras aplicações web e talvez consolidá-la em um único local. Caso esta aplicação de terceiros solicite alguma autenticação, que na grande maioria dos casos terá sua evidência de autorização armazenada em cookies (de sessão ou não), consulte sobre a classe System.Net.CookieCollection que ela pode te ajudar a adaptar seu código a essa situação.

segunda-feira, 11 de dezembro de 2006

0

Windows Vista + Office 2007

Instalei hoje o Windows Vista junto com o Office 2007, no meu notebook. Como todos estao falando, a interface realmente eh muito mais limpa e te dah uma sensacao de espaco bem legal. Mas, como podem ver, ainda nao descobri onde fica as configuracoes de teclado.

Achei visualmente bonito, mesmo que na pratica com pouca utilidade, a principio, os recursos do Aero. Os dados de performance tambem sao um bom acrescimo, com o indicador de performance basica (2.7 aqui, gracas a placa de video), que pode ajudar a indicar qual o indicador minimo para que um software desenvolvido possa rodar satisfatoriamente.

O Office 2007 esta bem melhor visualmente tambem. Assim a metade de uma palestra sobre o desenvolvimento de addin para o Office, usando o Ribbon e outros recursos no TechEd 2006, que abriu bastante os olhos para os recursos disponiveis. Parametrizacao dos recursos via XML eh o que me chamou mais a atencao.

Ainda vou colocar o Visual Studio e subir o resto do meu ambiente de desenvolvimento. Mais novidades em breve.

sexta-feira, 8 de dezembro de 2006

0

CodeSmith 4.0

Eu já conhecia o CodeSmith de outros Carnavais, inclusive usando para o desenvolvimento de aplicações ASP 3.0 e ASP.NET, mas resolvi agora passar a usar ele na empresa em que estou trabalhando.


Para o desenvolvimento de uma aplicação baseada em Windows Sharepoint Services 3.0, SQL Server 2005, estamos criando os templates de classes de negócio sobre o framework CSLA 2.1.1.


O desenvolvimento destes templates é baseado em .NET, mas você pode escrever templates para virtualmente qualquer linguagem de programação.


Começamos a trabalhar sobre os templates desenvolvidos por outros usuários e rapidamente já estávamos com nossas peculiaridades implementadas. Vou adaptar outros templates que tenho para a criação das stored procedures e depois outros para a criação de interface.


O tempo gasto no desenvolvimento deste tipo de templates se paga facilmente no decorrer do próprio projeto. Mas é fundamental que o modelo de dados seja corretamente desenhado, para que você se beneficie ainda mais da velocidade que essas ferramentas proporcionam.

Antigamente eu tinha ressalvas sobre o uso de ferramentas de geração de código e metodologias CASE. Achava que um dia iriam substituir o profissional de desenvolvimento. Hoje penso um pouco diferente: empregar as ferramentas adequadas pode ajudar, mas é só sabendo usá-las corretamente que os ganhos realmente aparecem.

segunda-feira, 4 de dezembro de 2006

0

Sobre este blog

O médico disse que escrever pode ajudar a fazer as vozes parerem. Vamos ver.

Hi ALL! Has been a long time...

Pois é, depois de um longo tempo sem escrever na internet, resolvi criar este blog como uma forma de devolver o conteúdo do ASP4Developers.com.br para a comunidade e poder voltar a ter um canal pra falar um pouco do que estou fazendo.

Certamente o conteúdo antigo está desatualizado em relação às novas tecnologias disponíveis, mas é bom pra matar a saudade. E também foi bom por poder olhar para o namespace Google.GData.Client, que permite escrever código gerenciado para subir e ler conteúdo no Blogger.

Depois de penar um pouco, por conta de estar usando o Blogspot beta e pela falta de códigos consistentes na documentação, montei o snippet abaixo:

using System;
using System.IO;
using System.Net;
using System.Xml;
using Google.GData.Client;

namespace Testes
{
///


/// Summary description for Class1.
///

class Class1
{
///
/// The main entry point for the application.
///

[STAThread]
static void Main(string[] args)
{
string blogId = "6668893451803848875";
Uri postUrl = new Uri(String.Format("http://beta.blogger.com/feeds/{0}/posts/full", blogId));

Service blogger = new Service("blogger", "ASP4D-DataTransfer");
blogger.setUserCredentials("rubens.farias@gmail.com", "password");

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"C:\Projetos\Testes\asp4d.xml");
XmlNodeList links = xmlDoc.SelectNodes("//Link[@URL='' and @GroupId != 'g0001' and @GroupId != 'g0006']");
i = 0;
foreach(XmlElement link in links)
{
Console.WriteLine( "Carregando {0} de {1}", ++i, links.Count);
XmlElement user = (XmlElement)xmlDoc.SelectSingleNode(String.Format("//User[@UserId='{0}']", link.GetAttribute("UserId")));

XmlElement group = (XmlElement)xmlDoc.SelectSingleNode(String.Format("//Group[@GroupId='{0}']", link.GetAttribute("GroupId")));
AtomCategory category = new AtomCategory(group.GetAttribute("Name"));

AtomEntry newPost = new AtomEntry();
newPost.Title.Text = link.GetAttribute("Subject");
newPost.Published = DateTime.Parse(link.GetAttribute("TS"));
newPost.Content.Content = link.InnerText;
newPost.Categories.Add(category);
blogger.Insert(postUrl, newPost);
}
}
}
}

Agora estou querendo subir os comentários dos posts, mas não é possível fazer isso diretamente. Vou pensar em um gato e depois posto ele aqui.

[]'s

Rubens