sexta-feira, 19 de fevereiro de 2010

C#: Twitter API

Página da apiwiki estão desatualizadas,

passo para vocês uma segunda opção:
http://www.twitterizer.net/


[OLD:]
Objetivo: 

"Twittar" a partir de um programa feito em .NET para sua conta no twitter. 

Primeiro passo é fazer o download da bibliotéca do Twitter que vamos usar na nossa aplicação 


ou se preferir, podemos ser mais diretos:

  • Descompacte o arquivo
  • Use o Add Reference do projeto que está aberto na sua IDE.
Depois disso, a coisa fica mais simples, e a primeira coisa que temos que fazer é usar a referência que criamos

using Twitterizer.Framework;
 Agora vamos instânciar a classe Twitter, note que os paramêtros de login e senha são obrigatorios para criarmos esse objeto
Twitter t = new Twitter("twitter_user", "twitter_password");
 depois de instanciarmos vamos dar nosso primeiro post
t.Status.Update("Ola Mundo");

quarta-feira, 17 de fevereiro de 2010

Dica: IBatis Data Mapper framework

Objetivo

Se você não gostar muito do NHibernate, a dica que eu dou é usar esse outro framework para persistir nossos dados:

http://ibatis.apache.org/

e aqui um tutorial da própia apache, muito bom:

http://ibatisnet.sourceforge.net/Tutorial.html

quarta-feira, 10 de fevereiro de 2010

C#: Agrupando um GridView

Objetivo: 

Agrupar um GridView por determinada coluna.

Ola pessoal, hoje vamos falar de algo que era para ser default do GridView mas que ainda gera muitas duvidas em relação ao seu uso, que é o agrupamento do GridView por um determinado "assunto" mas antes de começarmos, vamos fazer o download do GridViewHelper, desenvolvido pela http://www.agrinei.com/ (eu não sei quem são, mas fizerem um bom trabalho).

segue o link do download: 

descompacte o zip, e sobre a pasta App_Code do seu site, ou em um projeto de classe, adicione todos esses arquivos, menos, claro o webform, ".aspx"


O uso dele é muito simples, e no site do desenvolvedor você encontra todas as funções, vou listar aqui apenas a mais básica, mas com um porém, no site da fornecedora desse "ajudante" eles esquecem de mencionar que precisa ter uma referência para um evento do gridView que não foi postado lá. 

 Agora vamos criar nossa pagina, e vê como está a estrutura do nosso projeto:



Agora vamos colocar um pouco de código nisso aqui!

primeiro vá no seu projeto e adicione o arquivo Pais.xml com a seguinte estrutura:



Até ai ta tudo normal, nada que você não tenha visto, agora vamos adicionar o código do nosso helper, e vê como o gridview vai se comportar


using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace testeHelper
{
    public partial class _Default : System.Web.UI.Page
    {
        public void RealizaConsulta()
        {

            //==============================================
            // Criando um dataset e lendo arquivo XML
            //==============================================

            DataSet objDataSet = new DataSet();
            objDataSet.ReadXml(Server.MapPath("\\") + "Pais.xml");

            //==============================================
            // Passando nosso dataset e dando bind dos dados
            //==============================================

            grvGridHelper.DataSource = objDataSet;
            grvGridHelper.DataBind();

       
        }

        protected void Page_Load(object sender, EventArgs e)
        {

            RealizaConsulta();
          
            GridViewHelper helper = new GridViewHelper(this.grvGridHelper);
            helper.RegisterGroup("Estado", true, true);
            helper.ApplyGroupSort();

        }

        protected void grvGridHelper_Sorting(object sender, GridViewSortEventArgs e)
        {
            // Esse evento precisa ser declarado
            RealizaConsulta();

        }
    }
}

Reparem no código acima; Tivemos que realizar a consulta duas vezes, o que não é muito aconselhado se for um sistema muito requisitado, pense em outra forma de da um bind no grid no momento que ele faz o Sorting. 

E o resultado da nossa Grid fica assim:


Simples não? mais facil que isso só andar pra frente.

sexta-feira, 5 de fevereiro de 2010

JQuery: Barra superior de avisos como no Twitter

Objetivo: 
Avisos iguais ao usado pelo Twitter.



Mais facil que andar pra frente. 



quinta-feira, 4 de fevereiro de 2010

C#: Teste de Software com Pex

Objetivo: 

Explicar melhor o que é o Pex, como utilizal-o e suas vantagens, então antes de continuar lendo esse post, por favor, faça o download da versão de estudo, no site:



Mas então o que é o Pex?


é um gerador de Testes Unitários que assim como o nunit usa assertivas de pré-condição  para garantir um teste mais seguro, usando como conceito o test de Caixa Branca, que em linhas gerais seria o teste do código em si, ele vai fazer uso de uma pespectiva do seu código para modelar os casos de teste, e o pex veio para isso, identificar o que poderia "ser testado".


O seu uso é muito simples e vamos ver no decorrer do post.

Qual sua vantagem em relação aos outros metódos de test de software?

Agilidade! com pex (Muitos programadores java vão ficar mais loucos com isso)
apenas alguns clicks ele já monta seu projeto de test, alem de você poder fazer teste em momento de execução. 

"Ao mesmo tempo que se mantém a garantia do software nos permite centralizar os esforços ao desenvolvimento da lógica do negócio. (André Nobre)"


Antes de criar o projeto, vamos executar o instalador do pex que está disponivel no começo desse post, ele ira criar a integração com o visual studio (amo essa IDE) para facilitar nossa vida de nos deixar ainda mais preocupados apenas com o modelo do nosso negócio :)

Agora vamos criar um projeto ClassLibery chamado DAOComponente:


Depois de criar o projeto, vamos adicionar um novo item, uma classe que se chamará CLComparar.

Nossa solução vai ficando assim:




 E na classe  CLComparar vamos  adicionar o seguinte código:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DAOComponente
{
    public class CLComparar
    {
        ///
        /// Comparar objetos.
        ///

        public void Comparar()
        {
       
        }
    }
}
e agora vem a mágica:


antes que alguem fale, é meu Visual Studio tem o fundo preto, mas não é para ser matrix não é para nao ficar cansando a vista com a tela branca! :D

Depois de clicar com o botão direito sobre nossa classe e ir em Pex>Create Parameterized Unit Tests ira se abrir uma tela onde teremos algums valores, mas eu não aconselho vocês a mudarem ele agora não, deixa para "bulir" depois do exemplo, vamos deixar como está!


Na proxima tela, ele vai perguntar qual o nome do novo projeto de teste que você deseja criar... vamos colocar: "DAOComponente.Test":


Vamos ver como ficou nossa solução depois do wizard:


Reparem na estrutura criada pelo Pex, para a solução ele adicionou uma pasta com os arquivos de configuração e com o arquivo de metadados que esta ligado ao Test List, se a gente de um duplo click sobre ele, vocês veram a lista de todos os testes do projeto. 

Vamos agora abrir o arquivo de teste "CLCompararTest.cs"gerado pelo Pex:

using System;
using DAOComponente;
using Microsoft.Pex.Framework;
using Microsoft.Pex.Framework.Validation;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace DAOComponente
{
    /// This class contains parameterized unit tests for CLComparar
    [PexClass(typeof(CLComparar))]
    [PexAllowedExceptionFromTypeUnderTest(typeof(InvalidOperationException))]
    [PexAllowedExceptionFromTypeUnderTest(typeof(ArgumentException), AcceptExceptionSubtypes = true)]
    [TestClass]
    public partial class CLCompararTest
    {
        /// Test stub for Comparar()
        [PexMethod]
        public void Comparar([PexAssumeUnderTest]CLComparar target)
        {
            target.Comparar();
            // TODO: AQUI VOCE FAZ OS TESTES ANTES DE IMPLEMENTAR
        }
    }
}

Reparem que ele já criou o nossa função para Comparar (Igual a que ta no nosso componente ) assim podemos testar antes mesmo de implementar no projeto "real" isso é muito bom pois evita muita dor de cabeça depois.
        [PexMethod]
        public void Comparar([PexAssumeUnderTest]CLComparar target)
           {
            target.Comparar();
            // Escreva seu teste aqui!
         }


Não há atualmente nenhuma TestMethod como você esperaria um teste de unidade padrão do Visual Studio. Em vez disso, você tem um PexMethod. Este método é um teste de unidade parametrizadas. Posteriormente, quando você deixar Pex explorar código sob teste, ele criará outra classe parcial que contém os testes de unidade padrão anotados com atributos TestMethod. Esses testes gerados será acessíveis através do Visual Studio Test Editor.

Muito simples, não?!
Mais facil que isso só andar pra frente.

Obrigado e até a próxima.





ASP.NET: MVC x WebForm

Objetivo:

Falar um pouco sobre essa "polêmica" e interessante discução.

Antes de você tomar uma decisão por qual modelo usar, você deve levar em consideração algumas coisas; 


O que é o MVC?

Originalmente foi criado como padrão de projeto arquitetural desenvolvido para o ambiente Smalltalk, mas ele pode ser utilizado para qualquer aplicação interativa. Separação entre os dados (Model) e o layout (View). Desta forma, alterações feitas no layout não afetam a manipulação de dados, e estes poderão ser reorganizados sem alterar o layout. Porém se você quer ter controle total sobre tudo que acontece no seu frontend, esqueça Gridviews, DetailsViews ou qualquer controle "Visual" pois é tudo na unha!

O que é um Webform?
Na época que a Microsoft lançou o .NET o PHP e o JAVA estavam dominando o mercado, deixando o tradicional ASP, ou ASP Classico que é como eu chamo, de lado, como trazer, de maneira rápida e não dolorosa os programadores VB  e ASP para essa nova arquitetura, sem traumas e de maneira "transparente"? o webform foi a resposta, na época foi uma grande sacada, você arrastar um botão para seu webform da um duplo click e programar o evento dele ali mesmo, isso te lembra alguma coisa? Delphi, Visual Basic? se sim, então você já entendeu porque esse conceito se tornou popular e ajudou de maneira brilhante a aceitação do .NET para a comunidade.

Agora que já espanei a diferença entre eles, vamos listar o que tem de positivo em cada modelo:

  • Facilidade para testes - Ponto para o MVC.
  • ASP.NET Routing ou mapeamento de rotas - Ponto para o MVC.
  • Maior controle sobre o html - Ponto para o MVC.
  • Wizards - Ponto para o WebForm.
  • Produtitivdade - Ponto para o WebForm.
Colocando esses pontos em cima da mesa, podemos dizer quer o MVC sai "ganhando" mas não se engane, eu ainda não aconselho usar o MVC se você quer produtividade.

Links para você se decidir, experimentar e testar:


quarta-feira, 3 de fevereiro de 2010

Mono: Bastidores da Implantação do Mono na PGE-CE

Objetivo:

Vou explicar como foi a experiência de implantar o Mono na Procuradoria Geral do Estado do Ceará. (Mas não vou dar nome aos bois)

Tudo começou se não me engano em Dezembro de 2007, quando o governador "Recomendou" para que os orgãos migrassem tudo para software livre, esse pedido foi atendido de prontidão pelo então procurador geral do estado, e repassado a CTI que era a empresa que geria toda a tecnologia usada na PGE, ( e ainda deve ser )  que acatou muito bem as ordens e com muito esforço implantou de forma brilhante, o uso de tecnologia livre em todos os setores do orgão. 

Mas voltando ao assunto, quando iniciamos o projeto a nossa equipe era relavivamente pequena, de desenvolvedores, fui chamado na sala do coordenador junto com o gerente de projetos para ouvir o que ele tinha a dizer, que era para avisar que o Procurador Geral pediu para ele pessoalmente que todos os softwares tinham que ser livres. me assustei um pouco, mas quase que de imediato pensei em uma nova tecnologia que se propunha a rodar .NET no linux e deixar ele "Portátil" o Mono, quando eu falei eles não acreditaram muito nao...  Ainda lembro que na época o então Coordenador do CTI, junto com o Gerente de Infra, me pediu para assinar um termo me comprometendo a rodar uma aplicação .NET no Linux, mas sinceramente eu não lembro se era brincadeira, mesmo assim tive sete dias para instalar em uma maquina que foi "doada" exclusivamente para essa tarefa uma aplicação .NET rodando perfeitamente no linux, e com muito esforço conseguimos rodar nosso primeiro helloword. 

Mas nem tudo foram flores, para chegar e dizer para o nosso coordenador que estava tudo ok, foram mais três meses de luta, primeiro que o Assessor Especial de Tecnologia do Governo na epoca batia o martelo junto com um outro profissional parceiro dele que a distribuição tinha que ser Fedora, o que eu não concordava muito, pois me parecia lógico que se o mono tem apoio da novell, nada mais inteligente usar OpenSuse, mas tudo bem, ordens são ordens ( acredito que essas pessoas estavam muito mais acostumadas com fedora e não queriam alterar ou mudar seus habitos ) isso acarretou muitos problemas de instalação dificultando muito a configuração do servidor por parte do nosso amigo Rafael, e por minha parte com o MonoDevelop, que não rodava legal nesse ambiente (Não compilava nada feito em VB e só estava rodando parte  de algums códigos, não reconhecer o CodeBehind do webform e erros de dependências impossiveis de decifrar), mesmo que em teoria era para funcionar com perfeição, Só que quando instalamos o openSuse e conseguimos rodar um app que já tinha sido feito em .NET com o Visual Studio e sem praticamente migrar nada, é que bati o martelo e falei para o coordenador do CTI que éra a unica forma de rodar legal e sem dificuldades seria a adoção do openSuse. e o que acabou se confirmando e até hoje está nessa distro.

No final do projeto, entrei em contato com o MonoBrasil que é um grupo de usuários que eu acreditava que fossem se interessar pela notícia, o que se confirmou, recebemos inclusive a visita de um dos engenheros da novell do mono, mas apartir dai eu segui outro caminho e a PGE/CTI o seu. 

Só para lembrar que hoje são 400 Desktops Linux. Eles estão usando Firefox + Thunderbird + OpenOffice como solução base, a distribuição escolhida foi o OpenSuse. Os servidores da rede foram todos migrados para Suse Enterprise Linux, agora eles estão rodando um ambiente 100% livre e não esquecendo, com um ambiente de desenvolvimento, que até esse texto era Mono.

Matheus, mas as maquinas eram dualboot? ou rodava em uma VM? tinha interlicense no codigo? tinha o famoso Arrastar e soltar controles da toolbox? 
R:Não nada disso, e acredito que até hoje não tenha, mas foi muito proveitoso.

Matheus posso usar mono com outros frameworks, como Nhibernate e Spring.NET?
R:Sim, claro, porque não? é até um conselho que dou, sempre teste seus componentes de negócios antes de colocalos em uma interface , use NUnit para testar, é até melhor do que esse framework da Microsoft para testes. 

Você trabalha com mono hoje em dia? 
R:Apenas em um, estou trabalhando no projeto com Iphone com Mono Touch, e quando esse projeto estiver "OK" eu posto um feedback dele.