Arquivo

Arquivo de junho, 2010

[fisl11] Minha proposta de palestra foi aceita

21 de junho de 2010

Nos dias 21 a 24 de julho, será realizado em Porto Alegre o fisl11, o 11º Fórum Internacional de Software Livre.

O FISL é o maior evento de software livre da América Latina e a edição do ano passado atingiu a marca de 8.244 participantes.

Entre os assuntos que serão abordados, estão:

  • Linux, Ubuntu, KDE, BSD
  • Desenvolvimento em Ruby, Java, PHP, Python, Perl e Smalltalk
  • Desenvolvimento de Jogos, Multimídia e Streaming
  • Gerenciamento de Dados (SGBD, Storage, backup…)
  • Hardware, Sistemas Embarcados e Robótica
  • Segurança
  • Software livre e negócios
  • Educação e Inclusão Digital

Minha proposta de palestra “Locaweb + Spree: transformando código aberto em um projeto comercial” para o fisl11 foi aceita.

Segue o resumo da palestra:

Os desafios, benefícios, dificuldades e lições aprendidas que a equipe de desenvolvimento de SaaS da Locaweb teve na utilização do Spree, uma plataforma de comércio eletrônico de código aberto, como base de seu novo sistema de loja virtual multi-usuário, desenvolvido em Ruby on Rails. O poder e o dinamismo do Ruby tiveram destaque, com grande utilização de metaprogramação nas extensões do Spree.

Eventos , , , , , , , , ,

System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a receive.

21 de junho de 2010

Na semana passada estávamos mexendo em uma aplicação desenvolvida em .NET 2.0. O objetivo era incluir uma nova funcionalidade que dependia de um Web Service SOAP de terceiros.

Para fazer a nova implementação o mais rápido possível, utilizamos o recurso “Add Web Reference…” do Visual Studio 2005 para criar um proxy para o Web Service que queríamos consumir.

Fazendo isso, o Visual Studio 2005 gera algumas classes no arquivo Reference.cs (para visualizá-lo é preciso estar com a opção “Show all files” habilitada na janela Solution Explorer).

A partir dessas classes você pode fazer a comunicação com o Web Service através de simples chamadas de métodos.

CalcPrecoPrazoWS proxy = new CalcPrecoPrazoWS();
Resultado resultado = proxy.Calcular("03478010", "13500313", "0,456");

O problema

Até aqui tudo certo, mas quando testamos a aplicação fazendo a chamada do Web Service, aconteceu o seguinte erro:

System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a receive.
at System.Web.Services.Protocols.WebClientProtocol.Ge tWebResponse(WebRequest request)
at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request)
at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)

Depois de pesquisarmos um pouco, descobrimos que as possíveis causas desse problema são:

  • Quando o servidor do Web Service inesperadamente fecha a conexão
  • O time out do servidor do Web Service é muito baixo
  • O servidor do Web Service “reseta” a conexão inesperadamente, algo como uma exceção não tratada

A solução

Quando você chama um método da classe proxy, no exemplo acima a classe CalcPrecoPrazoWS, internamente a classe SoapHttpClientProtocol, que é a classe base do nosso proxy, aciona seu método protegido GetWebRequest, que irá fazer um requisição Web através da classe WebRequest.

Para não mantermos a “conexão viva” na requisição Web, sobrescrevemos o método GetWebRequest da classe SoapHttpClientProtocol, convertendo um objeto WebRequest em um objeto HttpWebRequest e configurando a propriedade KeepAlive para false antes de acionar a requisição.

protected override WebRequest GetWebRequest(Uri uri)
{
    HttpWebRequest webRequest = (HttpWebRequest)base.GetWebRequest(uri);
    webRequest.KeepAlive = false;
    webRequest.ProtocolVersion = HttpVersion.Version10;

    return webRequest;
}

Isso pode ser feito no próprio arquivo Reference.cs, dentro da classe proxy que foi gerada pelo Visual Studio 2005. Mas qualquer alteração na referência Web, o Visual Studio 2005 irá gerar novamente o código do arquivo Reference.cs e seu código será apagado.

Então a melhor maneira de fazer isso é utilizar os recursos de classes parciais do .NET e separar seu código em um arquivo separado, como mostrado no exemplo abaixo:

public partial class CalcPrecoPrazoWS
{
    protected override WebRequest GetWebRequest(Uri uri)
    {
        HttpWebRequest webRequest = (HttpWebRequest)base.GetWebRequest(uri);
        webRequest.KeepAlive = false;
        webRequest.ProtocolVersion = HttpVersion.Version10;

        return webRequest;
    }
}

Mas não é só isso

Há também um série de outras causas para esse problema, bem como outras possíveis soluções, inclusive quando você está usando WCF no .NET 3.5.

A solução que apresentei funcionou no meu caso. Se ela não resolver seu problema, vale a pena investigar nesse artigo do suporte da Microsoft que lista possíveis causas e soluções:

You receive one or more error messages when you try to make an HTTP request in an application that is built on the .NET Framework 1.1 Service Pack 1
http://support.microsoft.com/kb/915599

Esse artigo é um tanto confuso e mal organizado, mas já é um bom começo.

.NET , , , , , ,

Los Angeles Lakers é Campeão da temporada 2010 da NBA!

20 de junho de 2010

Na última terça-feira, dia 15 de junho de 2010, o time do Los Angeles Lakers se consagrou Campeão da Temporada 2009-2010 da NBA ao vencer o sétimo jogo do playoff final, contra o Boston Celtics, por 89 a 67, fechando a série em 4 a 3.

Este é o 16º título dos Lakers.

Todas as fotos são propridades de NBAE/Getty. Para ver mais fotos do jogo, clique aqui.

Esportes , , ,

Screencasts sobre Ruby on Rails 3

14 de junho de 2010

Em um keynote da RailsConf 2010, Gregg Pollack divulgou uma série de screencasts sobre Ruby on Rails 3.

Dive into Rails 3
http://rubyonrails.org/screencasts/rails3

Esses screencasts foram feitos por ele em parceria com a EnvyLabs.

Veja também esses slides da RailsConf 2010:

Keynote do Gregg Pollack
http://s3.amazonaws.com/dhhmix/rails3-railsconf2010.pdf

Tutorial “The Rails 3 Ropes Course”
http://assets.en.oreilly.com/1/event/40/The%20Rails%203%20Ropes%20Course%20Presentation.pdf

Na RailsConf 2010 foi anunciado o Rails 3 beta 4 e que a versão release candidate seria lançada até o final do evento. Ainda não foi lançado, mas deve estar disponível nos próximos dias.

Eventos, Ruby , , , , ,

Material de estudo sobre Ruby on Rails 3

14 de junho de 2010

Para acompanhar melhor os tutorias e apresentações relacionadas ao Ruby on Rails 3 que rolaram na RailsConf 2010, separei uma série de artigos/posts e fui lendo na viagem de ida.

Seguem os links:

Ruby on Rails 3.0 Release Notes
http://guides.rails.info/3_0_release_notes.html

Rails Edge Architecture
http://yehudakatz.com/2009/06/11/rails-edge-architecture

Rails 3: The Great Decoupling
http://yehudakatz.com/2009/07/19/rails-3-the-great-decoupling

ActiveModel: Make Any Ruby Object Feel Like ActiveRecord
http://yehudakatz.com/2010/01/10/activemodel-make-any-ruby-object-feel-like-activerecord

Sexy Validation in Edge Rails (Rails 3)
http://thelucid.com/2010/01/08/sexy-validation-in-edge-rails-rails-3

validates :rails_3, :awesome => true
http://lindsaar.net/2010/1/31/validates_rails_3_awesome_is_true

Active Record Query Interface 3.0
http://m.onkey.org/2010/1/22/active-record-query-interface

Why Arel?
http://magicscalingsprinkles.wordpress.com/2010/01/28/why-i-wrote-arel

Active Record Query Interface
http://guides.rails.info/active_record_querying.html

The Rails Module (in Rails 3)
http://litanyagainstfear.com/blog/2010/02/03/the-rails-module

The Lowdown on Routes in Rails 3
http://www.engineyard.com/blog/2010/the-lowdown-on-routes-in-rails-3

Rails 3 I18n changes
http://blog.plataformatec.com.br/2010/02/rails-3-i18n-changes

Rails 3: Introdução a Javascript Não-Obstrutivo e Responders
http://www.akitaonrails.com/2010/05/10/rails-3-introducao-a-javascript-nao-obstrusivo-e-responders

Rails 3: Introdução a Engines
http://www.akitaonrails.com/2010/05/10/rails-3-introducao-a-engines

Customizing Rails Apps with Plugins
http://www.railsdispatch.com/posts/building-or-updating-a-rails-3-plugin

Upgrading a Rails 2 App to Rails 3
http://www.railsdispatch.com/posts/upgrading-a-rails-2-app-to-rails-3

Getting Rails 3 Edge with jQuery, RSpec and Cucumber using RVM
http://lindsaar.net/2010/5/9/Getting-Rails-3-Edge-with-jQuery-RSpec-and-Cucumber-using-RVM

Rails 3.0 Beta – 36 Links e artigos para você começar
http://www.rubyinside.com.br/rails-30-beta-36-links-e-artigos-para-voce-comecar-2947

Ruby , , , , , , ,