Wednesday, January 28, 2009

Albert Einstein on crisis

It seems like 2009 will be a hard year, a really funny year. We're working harder than ever, both because of new customers demanding services from us and existing ones wanting more and more services (good!), but also because of new services we want to launch to enter in new market segments.

In these days of really hard work, uncertainty and crisis (probably more fear and panic than real problems), it's good to remember the following words from Albert Einstein:

Let's not pretend that things will change if we keep doing the same things. A crisis can be a real blessing to any person, to any nation. For all crises bring progress.

Creativity is born from anguish, just like the day is born form the dark night. It's in crisis that inventive is born, as well as discoveries, and big strategies. Who overcomes crisis, overcomes himself, without getting overcome. Who blames his failure to a crisis neglects his own talent, and is more respectful to problems than to solutions. Incompetence is the true crisis.

The greatest inconvenience of people and nations is the laziness with which they attempt to find the solutions to their problems. There's no challenge without a crisis. Without challenges, life becomes a routine, a slow agony. There’s no merit without crisis. It's in the crisis where we can show the very best in us. Without a crisis, any wind becomes a tender touch. To speak about a crisis is to promote it. Not to speak about it is to exalt conformism. Let us work hard instead.

Let us stop, once and for all, the menacing crisis that represents the tragedy of not being willing to overcome it.

read more...

Thursday, January 22, 2009

Going green

Nowadays there's a lot of buzz about "green". It's fashionable, it's "chic". Every equipment manufacturer claims to be the most power efficient in its area, and green is used both as a way to say "we are the best because we're the ones to take more out of the hardware" and as a way to improve the corporate social responsibility of the company. But, what's really important about green? Will the new green trends really work to save the planet?


In my opinion, there's only one way to understand green that can work:
green is just another way to make money. From a business point of view, green cannot be another expenditure; if green is planned as a global liability for which all of us (both persons and enterprises) must do an effort, with the "only" compensation of helping to save the planet, corporations won't go. However, if corporations can go green and, at the same time, have an important and quick return of the investment required to be green, improving their gross profit, then we have turned green in an opportunity instead of a cost. Then everybody will be eager to jump into this train.

This is not difficult to do: green means efficiency. It is, for every unit of energy required, have a lower overhead. Corporations have been trying to achieve the maximum efficiency in their finances. Some peope does the same with their personal finances. Industries are always looking for more efficient ways of manufacturing (eg., lean manufacturing). Being efficient means using less resources to do the same or obtaining more out of the same productive resources; so going green is not about putting solar cells in the roof, but instead to look for better ways to do the same. And since better ways to the same means doing the same (or more) with less, it means earning more.
Going green can be understood as doing things as best as possible.

So going green successfuly means just making more money (and a side effect is that doing things right, you help not only your pocket, but also the planet).

What can you do to improve your company products or servicess will being more "green"?

read more...

Thursday, September 18, 2008

Close the door when she's out (improve your web server performance)

Imagine you drive the traffic of an airport. This airport has 5 landing/runway strips that can be used simultaneously. To avoid turbulences and problems, a clearance time of 3 minutes must be wait after an airplane take off and before the next one can take off. If 2 minutes are needed for a plane to take off, it means that a maximum of 1 plane every 5 minutes can take off for a given strip. It gives us a maximum of 60 airplanes taking off every hour as a maximum for our hypothetical airport.

If we could reduce the clearance time from 3 minutes to 1, then the capacity of the airport will be increased from 60 flights per hour to 100 flights per our, that it's near a 67% gain.

Same thing happens with web servers. Most web servers allows you to configure the timeout for client connections (maximum time of inactivity before closing a connection with a client machine). Having a high connection timeout reduces your load capacity because you are losing 1 connection capacity for every connection that is just wasting time until it reaches the configured timeout value. Of course it wouldn't happen if your clients were polite and tell you when they are done. But the reality is that many times clients don't close connections (you can check it with the help of Apache logging capabilities, see my previous post Logging Apache's *_cache modules efficiency). That causes a lot of resource wasting, thus reducing your effective load capacity. Increasing the concurrency over your physical capacity will be similar to taking off an airplane without waiting for the clearance time, in the airport example, causing system instability.

Some months ago we did a performance audit for a big company that was having performance problems with their online publishing platform. In the audit we saw that their front-end web servers (remember, a front-end server must be fast always) were always at their maximum capacity of about 800 sessions per server on average, all the time (measured every 5 minutes and taking the 95 percentile). Although one of their sysadmins thought that timeouts had no relationship with performance or load, the reality was that lowering the innactivity timeout from 120 seconds to 20 seconds lowered the average of connections to 600 per server. It means:


  • the servers could handle about 200 connections more at any time

  • the servers were consuming about 1GB less RAM each one, so the system has more RAM for buffers, caches and so, greatly improving the performance


The conclusion is that if all the clients tell you when they are done, you will gain a lot of capacity. But if they do not (likely), then shut down idle connections quickly so another airplane can take off.

read more...

Wednesday, September 17, 2008

Random quote

Quality is free, but only for those who are willing to pay heavily for it
“Quality – if time permits” approach just does not work

(from Peopleware – Productive Projects and Teams, 2nd edition by Tom DeMarco and Timothy Lister)

read more...

Friday, September 5, 2008

How to be a good consultant

I often like to read the biography of those people who had improved our world leveraging their knowledge to science, and making a fair use of it. There's a lot to learn from great people like Marie Curie, Darwin, Newton and many others. I’m convinced that everything we learn can be applied to our life to make it better.
Michael Faraday was one of these great men, in my opinion.

Reading the biography of Michael Faraday, I read that he applied six basic principles to his scientific discipline all the time, that he learned from a book by Isaac Watts titled "The Improvement of the Mind", that Faraday read when he was fourteen.
These six principles are:

  1. Take always with him a notebook to be able to take notes at any time.

  2. Keep lots of correspondence with other people.

  3. To collaborate with as much people as possible with the goal of exchanging and commenting ideas with others.

  4. Avoid any controversy.

  5. Verify everything he was told.

  6. Don't generalize, talk and write as precise as possible.

These six simple principles can be applied easily to the consultancy job to become a great consultant. I often joke saying that a consultant is someone that sells to one company what he has seen it works in another company; the only key is to see a lot of companies. While I say it as a joke, it’s not completely unreal. It’s just like a summary of some of the rules or principles Faraday applied.

1. Be able to take notes any time, in any place.
This is even more simple today thanks to our high-tech gadgets. The key is to remember all we see that has a practical or interesting application for a given task, problem, project or challenge. Since our memory is rather limited, it’s useful to take notes.

2. Keep lots of correspondence.
Talking with others is one of the best ways to learn, as long as the others know what they talk about, of course.
When I started to work in the software industry, when I was thirteen, I was always impressed about the amount of smart people that my boss, a business consultant, knew (that later became my mentor, Pere). For any problem, he knew the right person to solve it (like Mr. Wolfe in Pulp Fiction); so, as per his customers, he was always able to find an optimal solution for them to any business-related problem. This impressed me so much, and he always told me that there’s nothing as valuable as to know people, don’t matter the business field or whatsoever. So I tried to follow his steps and to know and talk with as much smart people as possible.
I guess it’s the same thing that Faraday pursuits with this second principle, but of course nowadays correspondence are easier than it was in times of Mr. Faraday, so it provides us an important advantage here.

3. Collaborate with others to exchange and comment ideas.
This is one of the bases of the scientific work, and is always one of the pillars behind open source philosophy. It’s similar to the previous one, but with a more tight sense. I think it can be related to building a strong team with a deep multidisciplinary knowledge and a tight collaboration and fluent communication between all of its members. It definitely helps to achieve a continuous improvement, if the team is well organized and coordinated.

4. Avoid any controversy.
That’s a very important point. Discussion (in the sane meaning of the word) is good, controversy leads only to destruction, undermines motivation and may stop other’s creativity.
Also, a consultant is half of a technician in his area (doesn’t matter if finance, technology…) and half of a salesman. And a salesman should be more than anything else, a good communicator, somebody with the ability to get on well with people. So avoiding controversy is a must, since it doesn’t add value to the solution that your customers are looking for, and the job of a consultant is just to provide solutions.

5. Verify everything.
I have a friend that often says that PowerPoint can hold anything, real software sometimes cannot. A consultant must be a real expert on his area, near to a guru, so as a consultant you cannot trust blindly on what you are told is good or works. You should verify everything. I have two strong reasons for that:
  • You must be completely sure about the correctness of what you say or recommend, or advise clearly about your doubts to your customer; that means that you have done it before and you know that it works in this scenario.

  • To be an expert in your area you need real experience in it, and you need to keep up to date your knowledge. The only way to keep up to date your knowledge is to work on it in real cases. Verifying and testing the new things you learn in your lab is a good way to do it. Then you will learn more when you apply it with a customer case.

6. Don't generalize, talk and write as precise as possible.
Communication is the key to success for many projects, and very especially in software projects or in consultancy, because in these areas you’re talking about ideas, and when the work is done maybe too late to notice that there was some kind of misunderstanding.
Engineering is a scientific work, and consultancy is often also scientific (or should be) or at least technical, and as such a technical or scientific language should be used. It means a language that, among other characteristics, is clear, precise and concrete.
I’ve been involved in projects with different people from different countries, cultures, regions and languages, and the precision in the language is fundamental to avoid problems. Even with people of the same language, culture and region, misunderstandings in the language are one of the main causes of problems and often of failure of software projects. Maybe that’s why lawyers have so much work ;-)…


I try hard to apply these principles all the time, everyday. It’s a good way to improve your professional value continuously.

kaizen

read more...

Wednesday, July 30, 2008

See you at Nagios Konferenz

Nagios Konferenz 2008 will take place in Nuremberg the 11th and 12th of September this year.

This time CAPSiDE will be there with Jose Lus Martinez, CAPSiDE's CTO (view his blog), presenting a paper about Nagios notification methods.


Ton Voon, the CTO of our partner Altinity, will be there too giving several talks.

If you're interested in the conference, you can register and take a look at the agenda at NETWAYS' web site: http://www.netways.de/nagios_konferenz/y2008/.

See you in Nuremberg!

read more...

Wednesday, June 25, 2008

Book review: "Confesiones personales de un publicitario"

Title: Confesiones personales de un publicitario
Author: Lluis Bassat
Type: self-biography


This is the last book I've been reading and I must say it's very good. It's a kind of selfbiography from Lluis Bassat, the famous publicist, where he summarizes some situations from his life and thinks about it, showing his conclusions.

The book, written in a very plain and easy to read language, is divided by roles he has played in life (publicist, sportsman, kid, student, traveler...) more than in a chronological way, and it's a very interesting and valuable "transfer of experience" that shows you another point of view to the life. The point of view of a passionate man, with an insatiable curiosity, just like a kid, looking always for a way to improve everything he can, both as person and as a professional.

I specially agree with Mr Bassat on how a company looking for the excellence in his work should be (the requirements that he setted up for hs own company):
1- the company should be the best place to work in his sector
2- the company should have a small team with only the best professionals in his areas
3- the company should be the one that pays the best to his employees

This is one of the keys to the success.

A book worth reading it, no doubt.

read more...

Wednesday, June 4, 2008

Unix toolbox

My colleague Miquel sent me a very nice and useful document for Unix guys: the unix toolbox. You can download it in PDF! It contains a lot of commands reference for gathering system information, encrypting files, managing the file system, certificates, version control systems, databases and lots of other stuff.

Maybe nothing new for "sysadmin masters", but a very nice reference document for any other unix guy ;)

Link: the unix toolbox

read more...

Thursday, May 15, 2008

The (right) meaning of words

Yesterday night I was so tired that I didn't want to cook anything for dinner, so I decided to order some food to take away... but I noticed something very curious while reading the menu of my favourite "food to take away" shop. The picture in this post translates as:

VEGETABLES
Vegetable Chicken: lettuce, tomato, chicken, mayonnaise and boiled ham
Vegetable Tunna: lettuce, tomato, tunna, onion, boiled egg and mayonnaise
Vegetable York: lettuce, tomato, boiled ham and mayonnaise
First impression was: "OMG! didn't know that tunna and chicken were vegetarian food!". Then I realized that probably the guy who wrote the menu meant "sandwiches with vegetables (not exluding other ingredients)" and not "vegetarian sandwiches" when he wrote it. However, I understood vegetarian sandwiches at first glance.

If we were talking about software development, this missunderstanding may easily lead to a wrong development and hence to a work redo, deployment delays and general insatisfaction, both for the customer and for the tech team.

The worst thing that can happen in any software project is to develop the wrong project. And the main cause for that to happen is that requirements in plain language don't mean the same for all the actors involved in the project.

That's why one of the first artifacts you should create in any software project is a glossary of terms that clearly states the meaning of any important word for both the business and the project. Doesn't matter if you use user stories, use cases, plain text software requirements, all of them or any other kind of Software Requirements Specifications. The words that are important for the business, the project or the context must be clearly defined for all people involved. Of course, as any other project artifact, keep this glossary versioned.

But, how should this document be? Well, I think that there are no fixed rules for it as long as it works for you, but I will recommend you 3 simple rules that should keep in mind all the time:
  • keep the document visible to all team members; put it in the first page of the wiki of the project if you use it, send it to all members every time it's updated... everybody should have no doubts about terms and its definitions.

  • take it with you in all requirements gathering and development team meetings; force the use of the correct terms every time ambiguity appears and be sure ti have your ears ready to catch any word that may lead to confussion. If you're in doubt about adding a new term, then add it (I usually record meetings for later review).

  • if a definition takes more than two or three lines, check if you can divide it; e.g., if you are writing a definition like "User: anyone who can search in the web, log in in user area, register preferences or anyone who use the backoffice of the web site...", probably will be better served by defining two terms, "public area users" and "back office users".
Also, if you use user stories for requirement gathering, user stories and glossary of terms can provide feedback to each other and serve to you as a way to improve the quality of your user stories and of your requirements.
And remember, a vegetable dish doesn't need to be a vegetarian one ;-).

read more...

Saturday, May 10, 2008

Human-Machine Interfaces with Wii Remote

I've just seen what Johnny Chung Lee is capable to do with a $40 Nintendo Wii remote controller. Listen to this Ted talk and see it yourself.

I think that this is just the beginning of a great thing. Not only because of the possible wide spread of its uses because its low cost, as Johhny says in his talk, but because it maybe the start of a brand new set of HIDs.

I'm not talking just about Wii. I'm talking about the way Johnny interacts with the computer. For the whiteboard demo the use is obvious and already well stablished with interactive or digital whiteboards (although more expensive), and the possibilities for the game industry, specially for Nintendo, are clear too. But I think it can be the basis for a lot of other uses: better car driving aid systems, for example to know if the driver is getting slept and reduce speed and warn him is so, to be more productive with the computer (I often said, when I'm working with my computer with 2 screens attached, that the OS should be clever enough to set active the window that I'm looking to), helping impaired people to interact with electronic home devices and computers easily or as a cheap implementation for an interface similar to Microsoft Surface.

There are plenty of uses for this kind of interface, and having it already working with Wii hardware makes it widely deployed already to a lot of home users. Right now, while I'm sitting in the sofa in front of TV writing this post, I think that it can be used too for the Wii, when working as a DVD player, to know if you're really looking the film and pausing it if you go away from your TV. Less remote controls in your hands (btw, I wear glasses, so I just need a couple of IR leds on it ;-) ).

read more...