Master Thesis defense – Patterns for Introducing new Ideas in the Software Industry

I invite you to my master thesis defense next monday at IME-USP – Here’s is the address and time:

  • Rua do Matão, 1000 – Universidade de São Paulo.
  • 2pm in Auditório Jacy Monteiro
The thesis is about Patterns for introducing new ideas in the software industry.
You can read the whole thesis in this address. Here’s the abstract in English:

Continue reading

Elevator Bug

This is a common scene in the Condominio São Luiz elevators: every now and then appears a blue screen, or a Windows message telling people in the elevator to contact Microsoft. This morning it happened again. There was some kind of trouble with Adobe Flash Player plugin. “Inform this problem to Microsoft”

2 weeks ago I met another message box in the elevator. “The system has been recovered from a serious error”. If the system had a seriour error and has been recovered, why this message? What if the elevator stops between floor 9 and 10 and you get a message box: “Your elevator is in serious problem, please contact Microsoft for recovery”. I’m terrified. Does anybody has Bill Gates phone number, please?

Would a elevator running Linux or Mac fail the same way? Maybe yes, maybe not. But please, don’t ask me to call Microsoft! I’m stuck in the elevator! Call the fireman!!!

Refactoring Paintings

Refactoring is a well known technique in software development. In short terms, refactoring is to execute a sequence of small well defined steps with the intention to let your code base more clear, more beautiful, more elegant. The result of a continuous refactoring practice is a simpler and easier to maintain software project. There many times also when refactoring takes the programmer to create new abstractions and code generalizations.

Let’s go to a simple example: suppose we are programming a Person entity class. This class contains attributes like name, weight, age, gender, spoken language. After some time, I find out that I need to insert cats in my system for some reason. Continue reading


Turn resistance to the new idea to your advantage. Every innovation, in true, breaks something. So, every resistance is welcome. We need the resistance to test our new ideas and convictions. Skeptics are a gift! They give us information about our progress and teach us how we can adapt our approach.

Maybe, the most important point in changing is how we deal with fear. Every change process implies in fear on both sides: those who are being changed want to avoid the pain of (maybe) loose something; those who are promoting change have the fear that their idea are wrong or won’t be accepted. When both these sides get in contact surges an impasse. Resistance is not the main force that takes a change to failure. Reaction to resistance is the problem.

You will hardly get 100% approval of a new idea. This is welcome. Continue reading

Cloud Computing x Grid Computing

We all already know that Cloud Computing is a buzzword since its unknown origin. Moreover, we also know that many concepts of cloud computing are not as knew as some companies and their marketing department pretend they are. Specially when compared to Grid Computing, which is a more than 13 year old paradigm, there are many similarities (and also some differences). I’ll try to expose some of these points here.

Question no. 1: Is “Cloud Computing” just a new name for Grid?

YES, in the sense that both aim to reduce cost of computing, increase reliability and flexibility

But NO: Grid is more than 10 years ago, when we didn’t have the computer power available today. They context and scale it was made to operate (expensive hundreds of machines clusters) is different of today’s available infrastructure (hundreds of thousands of “low cost” computers and virtual machines created within them). Grid and Cloud operate in different scales.

Nevertheless, YES: Cloud and Grid problems are mostly the same. The details are different, but both deal with the same issues.

Question no. 2: What is Cloud Computing?

Yes, I know, there are a lot of different definitions of what Cloud Computing is and not much consensus between those definitions [2]. Then, I choose the best and most complete definition I found til now. It is the US National Institute of Standards and Technology (NIST) definition. Their definition is short and complete, when they say that Cloud Computing is

 “a model for enabling convenient, on-demand network access to a shared pool of configurable resources (e.g., networks, servers, storage, applications, and services) that can be rapidly provisioned and released with minimal management effort or service provider interaction” [1]

In other words, Cloud is meant to be:

  1. Massively scalable
  2. Encapsulated as an abstract entity that delivers different levels of services
  3. Driven by economies of scale [3]
  4. Dynamically configured

Question no. 3: What is Grid Computing?

Grid Computing, through well defined standard protocols, aims to

“enable  resource sharing and coordinated problem solving in dynamic, multi-institutional virtual organizations” [4][5]

this means that Grid:

  1. Is distributed computing
  2. Operates across multiple federated organizations
  3. Coordinates resources that are not subject to centralized control
  4. Uses standards, open, and general-purpose protocols
  5. Delivers non-trivial QoS
While points 1, 2 and 3 holds true also for Cloud Computing, points 4 and 5 are still a challenge in the Cloud area.

Question no. 4: How to compare Cloud and Grid side-by-side? [6]

The following Figure is an insightful overview when we try to compare Grid and Cloud:


[1] MELL, P. and GRANCE, T. 2009. Draft NIST Working Definition of Cloud Computing.
[2] “Twenty Experts Define Cloud Computing”, SYS-CON Media Inc, 2008.
[3] J. Silvestre. “Economies and Diseconomies of Scale,” The New Palgrave: A Dictionary of Economics, v. 2, pp. 80–84, 1987.
[4] I. Foster, C. Kesselman, S. Tuecke. The anatomy of the Grid: Enabling scalable virtual organization. The Intl. Jrnl. of High Performance Computing Applications, 15(3):200–222, 2001.
[5] I. Foster. What is the Grid? A Three Point Checklist, July 2002.
[6] FOSTER, I., ZHAO, Y., RAICU, I. and LU, S. 2008. Cloud Computing and Grid Computing 360-Degree Compared. In Grid Computing Environments Workshop (GCE ’08), Austin, Texas, USA, November 2008, 1-10.





#QCON – Functional Programming, Music and Art

Last month, at QCON, I was in a great talk about functional programming languages (like Haskell) and their benefits to the Art world. The title of the talk was “How Functional Programmers can
Help, Inspire, or even Be Artists”. First of all I’d like to emphasize that all good programmers are artists, and as Richard Gabriel said 6 years ago, we programmers should be trained like artists. This is the major problem of our Computer Science Courses.

We all know artificial intelligence and computer tools are getting better and better. Right know we can easily produce things like this video:

Continue reading

Thinking = Language

Last week, walking along the San Francisco streets, I had many insights. It was a great week at QCON, where I could meet many of the great people in the software development world.

I’d like to share with you one of my biggest insights. It has to do with how language is deeply related to thinking.

English is not my first language (I was born in Brazil and here we speak Portuguese), so I don’t know English as I know Portuguese. When I was in San Francisco, I’ve created a challenge for myself: Continue reading

Two Big Changes

I’d like to use this post to announce 2 big changes in my life. The first one is that since now I will post here in English instead of Portuguese. With this, I’d like to make my blog more understandable outside Brazil. I’m not sure I’m ready to write everything I think in a foreign language, but the only way to find it out is to begin writing and see what happen. So, here I am. For the practice I will also write some poetry in English, in my poetry blog.

The second change in my life is that Continue reading