A life comited to learning

Tag: Software

Quick introduction to REST and JAX-RS

Here are some slides introducing to REST world. Examples are using JAX-RS (JSR 311).

If we’re moving to the cloud-era, the undestanding of this architecture style is essential. In the cloud we are presented with services (Storage, Search, Graph, Geolocation, …) that we can and should use to build applications. Almost all of these services, available  in the cloud, provide some kind of interface and happens that, this  interfaces is, generally, a RESTful Web Service. If I want collaborate with these services I must talk the same language!! Moreover, exploring this architectural style in new applications opens the door for realy distributed and scalable systems, while the simplicity is kept high!

Here the slides:

PDF can be downloaded from here.

Continue Reading

Software Architecture disruption?

:Adrian Colyer is a smart guy and he  put together, in a talk, what software architectures will look like for the next years. True is, most of the services you’re using online today follow these architecture principles. Nothing new, thought.

Nothing in this architecture is can go wrong,  it’s so simple! This type of architecture is the perfect fit for this ubiquitous platform that is Internet.

Btw,  SpringSource makes it really easy to develop applications in this way, just look to Spring Integration project, for example. They have a plenty of projects, built on top of Spring, that makes development of this type of architectures more, and more fun and easy.

(Ignore the sound problems at the beginning 🙂 )

Contrast this with traditional “enterprise” architectures. Which side of the fence you want to be?

Continue Reading

How to violate the Interface Segregation Principle

In my last post, I gave away some slides where OO Design Principles are introduced. I have an though about the big-fail that was the J2EE (before JEE5), in terms of violating the Interface Segregation Principle.

If you you are fortunate enough to have experienced the pain of writing applications with J2EE, then you recall that, for example, when you define an Stateless EJB, you have to implement the SessionBean interface.

Well, this is a clear violation of the Interface Segregation Principle, your EJB component have to implement the EJB lifecycle callback methods, even if you don’t need them. Right?

For instance:

public class MyComponent extends SessionBean {
    public void someCoolBusinessMethod() {
         // Business knowledge is coded here
    }

    public void ejbCreate() {} //Don't have anything to do in this EJB lifecycle callback, but the interface forces me to implement the method

    public void ejbRemove()  {} //Don't have anything to do in this EJB lifecycle callback, but the interface forces me to implement the method

   public void ejbPassivate() { } //Don't have anything to do in this EJB lifecycle callback, but the interface forces me to implement the method
...
}

Latest versions of JEE (5 and 6), allows you to bind methods to component lifecycle events declaratively, with annotations of XML. For example:

public void MyOtheComponent {
    public String realBusinessMethod() {
        return "I do really cool stuff";
    }

@PreDestroy
   private void letMeGo() {
   //Any business that should run before the object is left to the GC
   }
}

They fixed it, but very behind time…

Continue Reading

Object Oriented Software Design Principles and guidelines

I had recently to refresh the SOLID principles in Object Oriented Design discipline. SOLID stands for:

Single Responsability Principle
Open Closed Principle
Liskov Substitution Principle
Interface Segragation Principle, and
Dependency Inversion Principle

These are the principles for Object Oriented design, but not following them don’t make me a bad developer, of course. As with any principle, it can be violate if a good reason exists supporting that.

Continue Reading

O conhecimento é gratuito!

Será o conhecimento gratuito ou quase gratuito?  Não sei se existem muitas empresas em Portugal a utilizar mailing-lists efectivamente. Acho que as mailing-lists podem ser uma fonte de conhecimento gratuita.

Este poderá ser a história de muitas equipas em muitos projectos. É uma história de uma equipa de desenvolvimento de software que trabalhou para uma pequena empresa de fogões de sala. Eles ganharam um contrato de um projecto para integrar uma aplicação Web, desenvolvida em Java, com o Twitter. O projecto deveria estar pronto em 6 meses, sob pena de perderem 10 000€ por mês de atraso.

A empresa cliente vai experimentar utilizar o Twitter para aumentar as vendas e querem integrar o site com o Twitter. A cliente quer utilizar palavras chave associadas aos produtos para actualizar várias contas do Twitter. Cada actualização automática tem palavras chave de um produto e um link para a página do mesmo.

Depois de alguma pesquisa e análise, decidiram utilizar o Twitter4J, uma biblioteca de software em Java para abstracção da API Restful do Twitter.

Não tinham qualquer conhecimento na biblioteca Twitter4J. Inicialmente estimaram que demorariam cerca de 2 meses para ganhar o conhecimento e experiência necessária para fazer algo do género em seis meses.

Depois de um pequeno brainstorming chegaram a duas alternativas para colmatar a falta de experiência e eliminar, ou reduzir, qualquer risco de atraso.

Alternativa 1 – Contratar um consultor com conhecimento em Twitter4J para trabalhar no projecto durante dois meses que custaria ao projecto cerca de 15 000 euros.

Alternativa 2 – Assumir o atraso de 2 meses que custaria cerca de 20 000 euros.

Como ambas as alternativas custavam bastante dinheiro à equipa, eles decidiram seguir por outro caminho mais arriscado, mas que nunca poderia custar mais que a segunda alternativa. A alternativa seguida foi:

Alternativa 3 – Começar já a desenvolver qualquer coisa, e se tiveram alguma questão bloqueante utilizam as mailing-list do Twitter4J e da API Restful do Twitter.

Eles seguiram com a terceira alternativa, e qualquer dúvida eles colocavam questões nas mailing-lists, tendo não acesso a um consultor, mas a centenas de consultores que lhes respondiam quase imediatamente.

A equipa consegui terminar o projecto com um atraso de 1/2 mês, o que significou um prejuízo para equipa de cerca de 5 000, comparados com os 15 000 da primeira alternativa e os 15 000 da segunda.

Acham que  nesta história o conhecimento foi quase gratuito?

Disclaimer: Isto é mesmo só uma história 🙂

Continue Reading

Convites Google Wave

Já tenho uma conta no Google Wave à algum tempo e ainda não ofereci os meus convites todos. Hoje a Google deu-me mais alguns convites e fiquei com 23. Quero dá-los porque ficar com eles não me serve de nada. No entanto, gostaria de dar os convites a quem realmente quiser  usar o Google Wave.

Ainda se notam alguns “bugs” no software, por isso é que ainda é fechado, mas já dá para fazer umas coisas muito interessantes.

Um vídeo em Português sobre o Google Wave.

Na minha opinião é uma ferramenta única para colaboração. Se alguem quiser um convite deixe-me um comentário com uma pequeno texto a descrever para que querem utilizar o Wave.

Boas ondas.

Continue Reading
Continue Reading

The ScrumMaster is not useless

I’m back from the Certified ScrumMaster Course + and heard a lot of Craig Larman’s bad jokes 🙂

Last year I wrote this article where I expressed my feelings about the usefulness of the ScrumMaster. During the last three days I learned a lot useful and funny stuff about Scrum and Lean. I enjoyed leaning that the ScrumMaster is responsible to help the organization change to a more Lean mode of operation where, among other things, teams are self organized and self managed. I’ve also leaned that the ScrumMaster is not useless! ScrumMaster is a temporary but necessary waste!

And if you think about this, it is probably the truth. If you have a truly agile and lean organization for what you need a  ScrumMaster? To help in a goal already accomplished?

Continue Reading

Microsoft nas núvens

Só hoje descobri que a Microsoft já tem a sua plataforma de “Cloud Computing“. Com o Azure Service Platform, os developers podem, como já podem há algum tempo fazer com o Amazon WS, distribuir as suas aplicações na rede.

Windows® Azure is a cloud services operating system that serves as the development, service hosting and service management environment for the Azure Services Platform. Windows Azure provides developers with on-demand compute and storage to host, scale, and manage Web applications on the Internet through Microsoft® data centers

Os developers que se atreveram a experimentar cedo este serviço, já experimentaram também 24 horas (+/-) de quebra de serviço.

http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/6c1cd8a2-8d9d-43e9-a1d8-928e0ca4de78

http://blogs.zdnet.com/BTL/?p=14698

http://www.theregister.co.uk/2009/03/16/azure_cloud_crash/print.html

Tenho lido bastante sobre as tendênicas do cloud computing, mas estas quebras de serviço não têm ajudado a ganhar a confiança merecida. Talvez por causa disso, algumas estratégias passam por disponibilizar as mesmas aplicações offline, como é o caso do Google Calendar.

Pessoalmente acredito neste novo paradigma que economicamente faz muito sentido e também compreendo todo cepticismo envolvido.

Acho que negar esta realidade pode ser perigoso para as empresas que não reconhecem o cloud computing como uma forma de vantagem competitiva.

O que acham?

Continue Reading