Temple Coding

  • Home
  • Open Source
  • Sobre
    • Livros que estou lendo
    • Sobre
RSS
Author Archives: vintem

Injeção de Dependência em Atributos/Filtros do MVC

Posted on 26/09/2011 by vintem
No Comments

É muito comum termos dropdowns/combos que contém o mesmo tipo de dados em páginas diferentes. Por exemplo digamos que seja necessário um combo com status em diferente páginas do projeto e que esses diferentes status tenham que vir do banco de dados.

Uma forma de mostrar isso na página, é salvar uma lista com os status que você pega do banco de dados na propriedade ViewData e exibir na página.

Como não devemos repetir esse código sempre, o que eu fiz foi criar um filtro do ASP.Net MVC e decorar as actions que precisam desses dados com esse filtro. Essa classe ficou assim:

?View Code CSHARP
1
2
3
4
5
6
7
8
9
10
public class ListaStatusAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        var repository = new NHibernateRepository();
        var tiposDocumento = repository.FindAll().OrderBy(t => t.Descricao);
        var controllerBase = filterContext.Controller;
        controllerBase.ViewData.Add("Status", tiposDocumento);
    }
}

Ótimo, agora é só decorar as actions com esse atributo. No ViewData teremos um item chamado Status com todos os status ordenados pela descricao. Um código feito uma vez só. Mas o que eu não gosto do código acima é que eu crio dentro da método uma instância da classe NHibernateRepository. Eu gostaria que isso fosse resolvido sem que uma dependência direta fosse criada para essa classe, afinal eu sei que essa classe implementa a interface IRepository, portanto eu posso ter uma dependência para a interface, o que é muito mais elegante.

Ultimamente eu tenho usado o Windsor para resolver todas as minhas dependências. E nesse caso vou usá-lo em conjunto com o ServiceLocator da Microsoft Enterprise Library. Se você já usa o Windsor é bem fácil de resolver, se não usa, dê uma olhada no tutorial no site do projeto e verá como é fácil usá-lo junto com o MVC.

Uma vez com seus componentes registrados, adicione uma referência para Microsoft.Practices.ServiceLocation.dll e no global.asax faça o seguinte:

?View Code CSHARP
1
ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(container));

Isso vai adicionar ao ServiceLocator um provedor de serviços que será implementado usando o Windsor.
 A classe WindsorServiceLocator pode ser encontrada para download aqui.

Pronto, agora dentro do meu atributo eu posso trocar o código para:

?View Code CSHARP
1
2
3
4
5
6
7
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
    var repository = ServiceLocator.Current.GetInstance();
    var tiposDocumento = repository.FindAll().OrderBy(t => t.Descricao);
    var controllerBase = filterContext.Controller;
    controllerBase.ViewData.Add("Tipos", tiposDocumento);
}

E aquela dependência feia foi removida.

Tweet
government,politics news,politics news,politics
Categories: ASPNET MVC | Tags: asp.net mvc, windsor

Globalização de validação do jQuery com o ASP.NET MVC 3

Posted on 17/09/2011 by vintem
3 Comments

O Asp.Net MVC 3 tem uma ótima funcionalidade que é a validação no cliente usando o plugin do jQuery validations e usando um script da própria Microsoft a validação é feita sem que seja necessário nenhum codificação especial. Basta usar os atributos do namespace System.ComponentModel.DataAnnotations.

Pra quem não sabe, para fazer essa validação basta adicionar os seguintes scripts (que já estão no template padrão de um novo site Asp.Net Mvc 3):

<script src=”/Scripts/jquery-1.6.2.min.js” type=”text/javascript”></script>
<script src=”/Scripts/jquery.validate.min.js” type=”text/javascript”></script>
<script src=”/Scripts/jquery.validate.unobtrusive.min.js” type=”text/javascript”></script>

Muito simples de verdade! Mas existe um problema, esse script não é globalizado, então digamos que você tenha que usar uma data na sua classe e você gostaria de validá-la, por exemplo eu tinha uma classe que entre outras coisas tinha que salvar uma data, para simplificar, algo como isso:

?View Code CSHARP
1
2
3
4
5
6
7
8
9
10
11
12
public class Pessoa
{
    public string Nome { get; set; }
    public string Sexo { get; set; }
    public string Rg { get; set; }
 
    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }
 
    [DataType(DataType.Date)]
    public DateTime? DataNascimento { get; set; }
}

Quando eu informava a data 16/09/1980, por exemplo, automaticamente era detectado uma data inválida, já que o esperado é que a data estivesse no padrão mm/dd/aaaa, mas é claro que no Brasil o padrão é outro.

Então como corrigir?

Primeiro fazer uso do plugin Globalize do jQuery, adicione referências a dois scripts (que é claro, podem ser baixados no site do projeto):

<script type=”text/javascript” src=”@Url.Content(“~/Scripts/globalize.js”)”></script>
<script type=”text/javascript” src=”@Url.Content(“~/Scripts/cultures/globalize.culture.pt-BR.js”)”></script>

Depois disso, tudo o que precisa ser feito é determinar qual a cultura que quer usar e indicar o parser do globalize para validar a data:

?View Code JAVASCRIPT
1
2
3
4
Globalize.culture("pt-BR");
$.validator.methods.date = function(value, element) {
    return this.optional(element) || Globalize.parseDate(value);
};

Não podia ser mais simples!

Tweet
government,politics news,politics news,politics
Categories: ASPNET MVC, JavaScript, jQuery | Tags: asp.net mvc, globalizacao, javascript, jquery

Tornando o acesso a dados simples com o Simple.Data

Posted on 16/08/2011 by vintem
No Comments

Recentemente eu precisei fazer um trabalho que era bem simples do ponto de vista de acesso a dados. Era algo como ler arquivos textos e salvar os dados em uma base de dados SQL Server. Simples assim.

Se tratando de uma tarefa simples, usar um framework como o NHibernate iria tornar a tarefa mais complexa do que precisaria. Eu poderia também usar o bom e velho ADO.NET, mas estamos em 2011 e já temos 4 versões do .NET Framework. Acho que já passei dessa fase.

Ai lembrei que recentemente ouvi um episódio do Herding Code falando sobre um tal de Simple.Data.

E não é que o nome vem bem a calhar, o Simple.Data é realmente simples.

?View Code CSHARP
1
2
3
4
5
public Document Insert(Document newDocument)
{
    var db = new Database.Open();
    return db.Documents.Insert(newDocument);
}

E foi tudo isso que eu precisei escrever para abrir uma conexão com o banco, com base na minha string de conexão configurada no meu arquivo app.config e inserir um documento na tabela documentos.

O Simple.Data faz uso do tipo dynamic do C# 4 e portanto é necessário usar a versão 4 do .NET Framework.

O que aconteceu no código acima é o que o Simple.Data entendeu que deveria existir uma tabela chamada Documents no banco de dados e automaticamente iria inserir um registro nessa tabela mapeando os campos da tabela com as propriedades da classe Document (desde que esses tivessem os mesmos nomes).

Da mesma forma se eu quiser fazer uma busca basta fazer algo assim:

?View Code CSHARP
1
2
3
4
5
public IEnumerable All()
{
    var db = Database.Open();
    return  db.Documents.All().Cast();
}

Assim, estamos listando todos os registros da tabela Documents.

Agora imagine que essa tabela tenha um coluna chamada User e que, obviamente, o classe Document tem uma propriedade chamada User. Para fazer uma consulta filtrando pelo nome do usuario bastaria fazer assim:

?View Code CSHARP
1
2
var db = Database.Open();
Document document = db.Documents.FindByUser("nomedousuario");

Lindo! Dinamicamente o Simple.Data vai procurar um registro que tenha o campo User = “nomedousuario” e vai popular as propriedades da classe com as colunas da tabela que tenham o mesmo nome.

Por fim, um último exemplo, digamos que exista uma colunda/propriedade chamada Amount e você queira pegar os documentos com valor maior que 50. Veja como é simples:

?View Code CSHARP
1
2
var db = Database.Open();
IEnumerable documents = db.Documents.FindAll(db.Documents.Amount &gt; 50).Cast();

Com certeza existe mais coisas no Simple.Data do que eu citei aqui, mas a idéia é que ele é bem simples e rápido. Usando o Nuget para adicionar o pacote, adicionar uma string de conexão chamada Simple.Data.Properties.Settings.DefaultConnectionString e pronto, você já consegue usar o Simple.Data.

Para saber mais visite o wiki do projeto no GitHub.

O código fonte usado nesse exemplo pode ser visto aqui.

Tweet
government,politics news,politics news,politics
Categories: .NET | Tags: dataaccess, simpledata

Criando Snippets para o Visual Studio 2010

Posted on 04/08/2011 by vintem
No Comments

Motivação

Apesar de ser e gostar muito de ser um desenvolvedor, sou totalmente a favor de escrever a menor quantidade de código possível. Porque menos código, geralmente quer dizer menos erros. Com isso em mente eu resolvi criar Snippets de código no Visual Studio 2010. Você pode até não saber o que é um snippet mas com certeza já usou um. Um snippet é uma pequena porção de código que é reutilizável. Por exemplo, entre no seu Visual Studio, e dentro de um método digite foreach e aperte Tab. Pronto, isso é um snippet.

Seguindo essa mentalidade e fazendo testes unitários eu me peguei escrevendo diversas vezes esse código:

?View Code CSHARP
1
2
3
4
5
[Test]
public void Meuteste()
{
 
}

Meu objetivo era que digitasse apenas um comando de atalho (nesse caso escolhi ntest) e que esse código fosse gerado pra mim, permitindo que eu apenas alterasse o nome do método.

Snippet Designer

O Visual Studio 2010 permite que você crie snippets através do seu editor de XML, que é o padrão, afinal de contas um snippet nada mais é do que um arquivo xml. Mas existe uma extensão para o VS2010 chamada Snippet Desiner que facilita um pouco o trabalho. Então vá em Tools –> Extension Manager e adicione a extensão.

Snippet Designer

Criando o Snippet

Crie um novo projeto no VS2010 e adicione um arquivo do tipo XML. Dê o nome que quiser, mas use a extensão .snippet. No meu caso o nome do arquivo é NUnitTest.snippet.

Ao criar o arquivo ele estará vazio e, portanto, o Snippet Designer não irá abri-lo. Clique com o botão direito no arquivo e me Open With, selecione o XML (Text) Editor e clique em OK.

EditorXml

Dentro do documento XML clique com o botão direito e selecione a opção Insert Snipet

Inser

Em seguida selecione a opção Snippet.

Inserir Snippet

O xml necessário para a criação do snippet será gerado, como você pode perceber ele mesmo é um snippet. #inception #feelings :)

É possível editar ali mesmo o xml, ou então podemos usar o Snippet Designer que acabos de instalar. Salve o arquivo e feche-o. No Solution Explorer, mais uma vez clique com o botão direito no arquivo e em Open With e dessa vez selecione a opção Snippet Desiger, uma tela como a abaixo deverá aparecer.

Snippet Designer2

Algumas coisas que precisam ser alteradas, no topo do lado esquerdo, dê um título e selecione a linguangem, no meu caso foi NUnit Test e C#. As proprieades do arquivo são bem claras, mas o que você deve ter uma atenção é pra propriedade Shortcut. O que você colocar ali é o que você vai digitar antes do Tab na hora de codificar. Eu preenchi o meu como ntest.

Na parte de baixo é onde você define a parte do código que é customizável quando você fica dando tabs no seu snippet, no meu caso eu queria customizar apenas o nome do método, então alterei o item que vem ali para testName e deixei campo Defaults to para testName também.

Por fim, a principal e maior parte da tela é onde você coloca o seu código do snippet, apenas preencha o código que você quer ali normalmente e substituia a parte customizável pelas variáveis que você criou, prestando atenção que o nome dessa variável deve estar entre $$, assim: $testName$. Veja como ficou meu snippet após as mudanças.

Snippet Editado

Utilizando o Snippet

O VS2010 usa diversos snippets, mas obviamente é muito fácil adicionar aqueles que foram criados pelos usuários. Basta carregar os arquivos .snippet criados por você dentro dele.

Por padrão quando se instala o VS2010 ele cria uma pasta dentro da pasta Meus Documentos chamada Visual Studio 2010, ali navegue para –> Code Snippets –> Visual C# –> My Code Snippets. Copie o(s) arquivo(s) .snippet que você criou e cole dentro dessa pasta. Isso é claro, considerando que são snippets de C#, caso contrário coloque na pasta correta.

É provável que tudo já esteja funcionando, mas para ter certeza, dentro do VS2010 vá em Tools –> Code Snippets Manager, selecione a linguagem e deve aparecer algo assim.

Code Snippet Manager

Se não aparecer ali, basta clicar em Add, navegar e selecionar a pasta onde estão os arquivos .snippet. Pronto! Isso é tudo que você precisa.

Agora é só testar. Vá até uma classe, digite ntest e aperte Tab. O código do snippet deve aparecer e o cursor deve estar posicionado no nome do método, pronto para que este seja alterado.

Finalizando

O snippet que eu criei é bem simples, mas de um código que eu faço toda hora, se você tem alguma coisa desse tipo e quer facilitar, esse é o caminho. :)

O código desse projeto está diposnível para download aqui.

Tweet
government,politics news,politics news,politics
Categories: Desenvolvimento | Tags: snippet, visualstudio

Análise: Growing Object-Oriented Software, Guided by Tests

Posted on 29/05/2011 by vintem
2 Comments

Eu acabei de ler Growing Objected-Oriented Software, Guided by Tests e posso dizer que é um livro altamente recomendável.

Para quem está interessado em começar, ou já começou e quer apefeiçoar a prática de desenvolver software usando testes antes de escrever o “código de produção”, é um ótimo livro.

Testing is no longer just about keeping defects from the users; instead, it’s about helping the team to understand the features that users need and to deliver those features reliably and predictably.

Após duas partes teóricas, o livro, na terceira parte, começa a ficar mais prático.

A terceira parte do livro se passa toda desenvolvendo um exemplo e realmente evoluindo uma aplicação aos poucos. Exemplo feito em Java, mas que nada atrabalha para quem não conhece muito da linguagem. Além disso, é ótimo seguir a linha de pensamento dos autores e ver como eles enxergam a evolução de um software orientado a objetos. E uma das melhores partes de sistema de exemplo, é que ele não fica no básico, muito pelo contrário, traz problemas do “mundo real”, como interação com serviços externos e testes de interface de usuário.

 

Embora a terceira parte seja ótima, é na quarta parte onde o livro realmente mostra seu valor. A quarta parte fala de desenvolvimento orientado a testes de forma sustentável, tratando de assuntos como: quando usar objetos mock ou não, facilitar a leitura e o entendimento dos testes, construção de objetos complexos necessários aos testes, entre outros.

Ainda existe um capítulo muito interessante que fala sobre testes na camada de persistência a dados, uma parte que eu sempre achei complexa de se testar. Ali, encontrei dicas valiosas.

Uma ótima leitura, recomendo!

Tweet
government,politics news,politics news,politics
Categories: Leitura | Tags: leitura

O livro eletrônico é só vantagem

Posted on 16/03/2011 by vintem
No Comments

Se você ainda não se convenceu de que os livros eletrônicos são uma boa opção ou mesmo uma realidade hoje em dia, quem sabe a lista de vantagens abaixo possa te ajudar.

Eu virei um fã e um adepto dos livros eletrônicos, sério, acho pouco provável eu comprar um livro em papel novamente (havendo a opção eletrônica) e principalmente se for técnico.

Veja só se essa lista te ajuda:

  1. geralmente são mais baratos
  2. se você compra livros em papel on-line paga frete, nos eletrônicos, obviamente não
  3. você não precisa esperar que eles cheguem pelo correio
  4. já existem diversos livros em português e podem ser comprados em sites brasileiros como Saraiva e Cultura
  5. se você gosta de anotar nos livros, existe um software da Amazon, o Kindle que permite marcar e anotar nos textos
  6. você não precisa comprar um Tablet ou E-Reader para ler seus livros eletrônicos, esse mesmo software do Kindle está disponível para diversas plataformas, inclusive celulares
  7. se você tiver um E-Reader ou Tablet, pode levar todos os seus livros com você e existem diversos no mercado
  8. se você não quiser comprar um E-Reader e tiver um smartphone também é possível. Eu tenho um Samsung Galaxy S com Android e a leitura é muito boa e tranquila, o maior problema é pra ler código ou ver imagens, quando é só texto, vai bem.
  9. é ecologicamente correto

A maior desvantagem do livro eletrônico é que não é possível expo-lo em uma instante, bom, pelo menos não em uma real porque na virtual já dá.

Tweet
government,politics news,politics news,politics
Categories: Leitura | Tags: ebook, leitura

Salvando alterações inacabadas com Git

Posted on 10/11/2010 by vintem
No Comments

Quanto mais eu uso o Git, mais eu gosto dele. Fato.

Sabe quando você está no meio de uma atividade, ela não está acabada, e chega um bug que você tem que corrigir? Ai o que você faz com a sua alteração que está no meio do caminho?

O Git tem um comando chamado stash. O stash é uma área separada dos seus commits feita exatamente para isso, salvar modificações inacabadas. E o uso é bem simples.

git stash save

Esse comando salva as modificações do diretório de trabalho e limpa o log para o último commit.

Por exemplo, digamos que você tenha um projeto que você concluiu a versão 1 e está no meio do desenvolvimento da versão 2.0 e você criou um branch para isso.

v2

E então, enquanto você no meio do desenvolvimento de uma outra atividade, aparece um bug para corrigir, seu status do Git estaria mais ou menos assim:

git_status

Você não pode fazer um commit, porque se você fizer isso o build irá quebrar, e você é muito responsável para fazer uma coisa dessas, né?. O que fazer?`

moron

É ai que o git stash resolve. Com o comando git stash save você obtém como resultado:

stash

O buffer fica limpo, você já pode fazer um checkout da versão 1.0, corrigir o bug e depois voltar para o branch da versão 2.0 e fazer um rebase da versão 1.0.

Quando estiver nesse ponto basta executar o comando git stash pop para resgatar suas atualizações.

stash_pop

Pronto, você está no ponto onde parou. E viva o controle de versões. Alegre

Existem mais opções no comando stash. Eu recomendo dar uma olhada na documentação do git.

Tweet
government,politics news,politics news,politics
Categories: Controle de Versões | Tags: controle de versoes, git

Ruby para desenvolvedores .NET–parte 2

Posted on 05/11/2010 by vintem
No Comments

Esta é uma série de artigos sobre Ruby para desenvolvedores .NET, confira os outros em:

Ruby para desenvolvedores .NET – parte 1

Ruby, é uma linguagem orientada a objetos. É  possível reconhecer, apenas com pequenas diferenças na sintaxe, algumas similaridades e diferenças de funcionamento, se comparado com o C#.

Podemos ver no código abaixo, a definição de uma classe(Usuario), a definição de um construtor (initialize), a definição de um método (autorizar_acesso) e a criação de 2 atributos, nome e email.

?View Code RUBY
1
2
3
4
5
6
7
8
9
10
11
class Usuario
  attr_accessor :nome, :email
 
  def initialize(nome)
    @nome = nome
  end
 
  def autorizar_acesso
    false
  end
end

O que podemos ver de diferente aqui, é que quando chamamos o método attr_accessor para criar as propriedades nome e email, internamente o Ruby cria duas variáveis de instância chamadas @nome e @email e essas variáveis podem, obviamente, ser acessadas por qualquer método daquele objeto.’

A propósito, instanciar a class Usuario é tão simples quanto:

usuario = Usuario.new

Retorno de valores

Uma outra coisa importante de lembrar no Ruby, é que a última instrução de um método sempre é retornada. Portanto dentro do método autorizar_acesso, estamos retornando o valor false. Colocar false como última instrução (e nesse caso, a única) é o mesmo que dizer return false.

Por exemplo, os dois métodos abaixo fazem a mesma coisa:

?View Code RUBY
1
2
3
4
5
6
7
8
9
10
def soma(x, y)
  # faz um monte de coisa desnecessaria aqui
  x + y
end
 
def soma(x, y)
  # faz um monte de coisa desnecessaria aqui
  resultado_soma = x + y
  return resultado_soma
end

Nos dois casos, x é somado a y e o resultado da soma é retornado.

Herança

Assim como em C#, Ruby também tem herança como podemos ver no exemplo abaixo:

?View Code RUBY
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Usuario
  attr_accessor :nome, :email
 
  def initialize(nome)
    @nome = nome
  end
 
  def autorizar_acesso
    false
  end
end
 
class UsuarioEspecial &lt; Usuario
  def autorizar_acesso
    true
  end
end

No código acima a classe UsuarioEspecial herda da classe Usuario e sobrescreve o método autorizar_acesso. Assim já podemos ver que é possível usar também o polimorfismo.

Métodos Estáticos

Ruby não tem métodos estáticos realmente, mas ele tem, o que é conhecido como métodos de classe e funcionam de forma similar aos métodos estáticos do C#. Para  usar métodos de classe basta que na declaração do método seja colocada a palavra chave self, como podemos ver:

?View Code RUBY
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class UsuarioEspecial &lt; Usuario
 
  def self.salvar
    enviar_email("texto do email")
    #salvar os dados do usuario
  end
 
  def autorizar_acesso
    true
  end
 
private
 
  def enviar_email(txt)
    # envia email
  end
end

O método salvar pode ser chamado diretamente na classe UsuarioEspecial, não é necessário criar uma instância.

UsuarioEspecial.salvar

Ainda no código acima podemos ver que para declarar um método privado pasta adicionar a palavra chave private e qualquer método declarado abaixo dela será considerado privado.

Interfaces

Interfaces são um artifício  das linguagens estáticas para dizer ao compilador que uma classe tem um ou mais métodos.

No Ruby não existe um compilador e portanto não existe essa checagem prévia. Também existe a questão de que podemos alterar uma classe Ruby mesmo depois que ela já foi declarada, mas vamos falar disso depois. Portanto não existe a necessidade de interfaces.

Digamos que exista a seguinte situação feita em C#:

?View Code CSHARP
1
2
3
4
5
6
7
8
9
10
11
12
interface IControlePagamento
{
    void Pagar();
}
 
class Pagamento : IControlePagamento
{
    public void Pagar()
    {
        // logica de pagamento
    }
}

O que esse código bem simples faz, é dizer ao compilador que a classe Pagamento implementa os métodos da Interface IControlePagamento. Em Ruby a única coisa que temos que fazer é efetivamente implementar o método Pagar()

?View Code RUBY
1
2
3
4
class ControlePagamento
  def pagar
  end
end

Isso tem vantagens e desvantagens.

A vantagem é que o código em Ruby é muito mais sucinto e objetivo, não é preciso escrever código para satisfazer o compilador. Existe apenas código para resolver o problema do negócio.

A desvantagem é que você não tem o aviso imediato do compilador caso o método não seja implementado.

Ainda assim, se você é adepto de técnicas como TDD, esse é um problema fácil de resolver, já que seus testes ficariam responsáveis por isso.

Outro recurso disponível no Ruby é que, toda classe automaticamente herda da classe Class, na classe Class existe um método chamado respond_to?. Esse método verifica se um objeto responde/contém a um determinado método.

respond_to_false

No exemplo acima a classe ControlePagamento foi definida sem o método pagar, veja que quando foi chamado o método respond_to? o retorno foi false.

Já abaixo o método foi definido e a resposta foi true.

respond_to_true

Enfim, existem opções para controlar isso e há gente que faça, mas vale dizer que pelo que tenho visto, o mais comum é simplesmente seguir uma convenção.

Conclusão

Nesse artigo já vimos mais algumas diferenças mais marcantes do Ruby, no próximo vou falar um pouco do Object Model do Ruby.

Duvidas, criticas ou sugestões? Deixe um comentário.

Tweet
government,politics news,politics news,politics
Categories: Desenvolvimento, Ruby | Tags: ruby

Ruby para desenvolvedores .NET–parte 1

Posted on 03/11/2010 by vintem
3 Comments

Eu tenho usado Ruby já há algum tempo, principalmente em alguns desenvolvimentos pessoais usando o Rails. Mas eu trabalho com C# já há mais de 8 anos e vivi fechado nesse mundo .NET por muito tempo, muito mais do que eu gostaria. De qualquer forma, ruby já tem feito parte do meu dia a dia, então eu gostaria de compartilhar algumas coisas que já aprendi sobre ruby, para aqueles, que como eu, vivem no mundo .NET.

Motivação

Ruby é e deve ser considerada uma linguagem de primeira classe, é possível hoje realizar aplicativos de diversos fins com Ruby e não somente aplicações web usando Rails. Mas, muitas vezes as empresas preferem ficar com linguagens mais conhecidas no mercado como Java ou C# para suas aplicações.

Ok, se você não pode usar Ruby para construir suas aplicações é bem provável que possa usar Ruby como uma linguagem de scripting (que ela é), para ajudar em trabalhos marginais porém importantes que muitas vezes não são feitos, ou são feitos usando outras coisas como XML, como por exemplo realizar Builds e Deploys, fazer testes de aplicativos, entre outros.

Se você pode escolher qual a linguagem quer usar, melhor pra você, Ruby pode ser uma ótima escolha, como veremos.

Interpretador

A primeira coisa que precisamos para usar Ruby é um interpretador de Ruby. Existem vários interpretadores por ai, o que eu vou usar aqui é o IronRuby. O IronRuby é um interpretador do Ruby que permite usar Ruby sobre a plataforma .NET, ou seja, vai permitir que você use os assemblies que já está costumado. É Ruby, segue a especificação de Ruby, com o adicional do .NET. Ótimo não é?

Eu recomento instalar a versão 1.0 que é compatível com o Ruby 1.8.7, andei fazendo uns testes com a versão 1.1 do IronRuby e ainda dá vários paus (pelo menos na data atual). A vantagem dessa versão 1.1 é que ela já vem com ferramentas para o Visual Studio 2010.

O Console

Uma vez com o IronRuby instalado, você deve ter o IronRuby Console no seu menu iniciar, ou então pode executar o console a partir de um prompt padrão com o comando iirb.

O console permite que você execute qualquer instrução ruby, vá e faça um teste simples:

console

Uma outra vantagem do Ruby é a “falta de cerimônia” no código como os {}, ;, () e afins. Aliando isso ao fato de ser uma linguagem interpretada, veja a diferença de um Hello World feito em C# para uma aplicação console e uma em Ruby.

?View Code CSHARP
1
2
3
4
5
6
7
8
9
10
11
using System;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(string.Format(&quot;Hello World, {0}&quot;, args[0]));
        }
    }
}

E agora em Ruby:

?View Code RUBY
1
puts "Hello World, #{ARGV[0]}"

Considere, que além da diferença da linguagem, para rodar o aplicativo no .NET é preciso compilar, gerar um executável e então rodá-lo. E para rodar o script Ruby, considerando que ele foi salvo num arquivo chamado hello_world.rb basta executar o comando:

comando_ruby

Fortemente, Estaticamente e Dinamicamente tipado

Falando da linguagem realmente, Ruby é uma linguagem fortemente e dinamicamente tipada. O que isso quer dizer?

Quer dizer as variáveis tem um tipo bem definido, por exemplo uma variável do tipo String não pode ser somada a uma variável do tipo Fixnum veja:

tipos

Veja que apenas por atribuir um valor às variáveis os tipos foram definidos como Fixnum e String, isso é definir uma tipagem dinamicamente, ou seja, no seu primeiro uso. Nos casos acima as variáveis texto e numero são instâncias das classes String e Fixnum respectivamente e por isso tem acessos aos seus métodos, então se você quiser concatenar as duas variáveis em uma string pode fazer o seguinte:

concat

Veja que chamei o método to_s que converte para string e então foi gerado o texto “VinTem12”

Linguagens, estaticamente tipadas, como o C#, tem seu tipo definido em tempo de compilação, ou seja, antes da execução.

Usando o .NET

Como um exemplo simples de como é possível usar as classes do .NET a partir do IronRuby, vou mostrar um código básico de um MessageBox do Windows Forms.

clr

O princípio é o mesmo para qualquer classe do .NET Framework. Alegre

Concluindo

Essa foi apenas uma apresentação inicial de como instalar um ambiente Ruby no Windows, do console do Ruby e da diferença mais básica entre Ruby e C# que é a tipagem.

Nos próximos vou falar um pouco mais a fundo das características do Ruby e quais as diferenças para o C#.

Tweet
government,politics news,politics news,politics
Categories: Desenvolvimento, Ruby | Tags: ironruby, ruby

Convertendo um texto ISO-8859-1 para UTF-8 em Ruby

Posted on 01/11/2010 by vintem
No Comments

No Ruby 1.9 uma coisa que você pode ter certeza é que terá dor de cabeça é com Encoding. Faça uma busca rápida no google por “ruby 1.9 encoding” e você vai entender do que eu estou falando.

Hoje eu tive que converter um conteúdo que estava em iso-8859-1 para utf-8 e recebi o seguinte erro:

incompatible character encodings: UTF-8 and ISO-8859-1

Para resolver isso eu usei:

?View Code RUBY
1
"meu texto".encode("UTF-8", undef: :replace, invalid: :replace)

E o problema foi resolvido. Segundo a documentação do Ruby 1.9 o parâmetro :invalid com o valor :replace, faz com que o método encode substitua o carácter inválido. O padrão é gerar uma exceção.

Tweet
government,politics news,politics news,politics
Categories: Desenvolvimento | Tags: encoding, ruby
Previous Entries
  • Categorias

    • .NET (1)
    • ASP.NET (1)
    • ASPNET MVC (15)
    • Blog (1)
    • Controle de Versões (2)
    • Desenvolvimento (10)
    • Java (1)
    • JavaScript (2)
    • jQuery (1)
    • Leitura (5)
    • Ruby (2)
    • Ruby on Rails (1)
    • Sem categoria (23)
    • Testes (4)
  • Language

    • English
    • Português
  • Tags

    agilidade asp.net asp.net mvc asp.net vc automapper blog code templates controle de versoes css dataaccess dependency injection ebook encoding eventos excecoes firebug git globalizacao hibernate iis ironruby jasypt java javascript jquery json leitura less mvccontrib qcon rails ruby selenium simpledata snippet stored procedures structuremap tdc templates testes testes integrados visualstudio vraptor windsor
© Temple Coding. Proudly Powered by WordPress | Nest Theme by YChong