Archive for October, 2006

Linuxday a Torino, Openday a Milano

Monday, October 30th, 2006

Weekend dedicato al Linux Day! Finalmente!

Quest’anno, su invito di un amico, sono andato a Torino, e i ragazzi del Gnug meritano davvero un applauso! Per due motivi:

  1. la location: mi ha fatto un po’ strano trovarmi sotto ad una chiesa, ma scoprire che in pratica è un centro conferenze (quei posti splendidi, con lunghe file di sedie, proiettori, impianto audio, reception, eccetera) è stata un’ancor più piacevole sorpresa!
  2. gli speaker: due fantastici Massimo Tonon e Emiliano Grilli (mi spiace non citare gli altri, ma la verità è che ho partecipato solo a metà evento…).

E la natura degli speaker merita una riflessione: non erano dei tecnici, o meglio, non esattamente degli informatici.

Massimo fa l’architetto e usa software libero per i rendering tridimensionali dei suoi progetti. Emiliano (se ho ben capito) ha uno studio di registrazione e usa software libero per mixare (quella lunga attività che precede la creazione di un disco).

Non sono programmatori, non hanno studiato informatica, non sono geek. Eppure eccoli lì, a spiegarmi vantaggi e svantaggi, trucchi e segreti per sfruttare al meglio i software che usano.

Bello. Perchè finalmente vedo non-tecnici parlare a tecnici. Perchè ora ho le prove che non serve essere geni dell’informatica per usare software libero. Basta essere curiosi. Basta averne l’esigenza. Loro sono persone curiose e per abbattere i costi dei software necessari ad operare nel loro campo sono passati al software libero. Si sa, nelle nicchie di mercato le cose costano più care.

Tornato a Milano in tarda notte (almeno per le F.S.) questo pomeriggio sono andato a Cinisello Balsamo, a Villa Girlanda, con lo scopo di seguire lo speech di Maurizio Napolitano sui GIS. Anche qui, location stupenda e sono stato pure omaggiato di una rivista. Non che sia molto importante, per carità, ma caspita: queste cose non le facevano solo le “grandi” aziende, quelle, per intenderci, che ricoprivano di gadget i ragazzini dello SMAU? No, ora le facciamo anche noi. I tempi cambiano.

Due note particolari su Cinisello.

Ieri (a Torino) ho scoperto che gli italiani sono molto attivi nello sviluppo di software dedicato all’audio. Oggi (a Milano) scopro che siamo leader mondiali nello sviluppo di sistemi GIS. Quindi sommo altre presenze importanti in altri progetti e ne deduco che noi italiani spacchiamo il culo ai passeri! Altro che pochi brevetti = poca innovazione come stasera ha detto il TG1.

Ma il TG1 lo perdono. Perchè ieri hanno fatto pubblicità al Linux Day! E ne ho visto gli effetti! Stavo uscendo da Villa Girlanda e una famigliola stava entrando, forse per una passeggiata nello splendido bosco/giardino che la circonda: passo oltre e un metro dopo sento la mamma dire “Ah! Ma c’è il Linux Day! Hanno fatto un servizio ieri…“.

Sì!! Così!!

Scene #1

Tuesday, October 24th, 2006

Mr. Ipsilon is having his speech at the annual IpsilonConf in Wherever. A silent crowd in hanging on his lips.

The first rows of chairs are reserved to some VIPs: the local city government, some big coorp heads and industry leaders.
Most of the other chairs are occupied by fans (”He’s a genius!”). And some others were told to sit there by their chiefs.

Mr. Ipsilon is announcing the final, long awaited, release of “Suffix® 3000″, the latest and greatest in the all-in-one software suites. They have called it “suffix” because he liked the idea of always having the last word in whoever decisions and activities.

He’s describing the features and benefits everyone can gain from his product.
The crowd is happily whispering a lot and he must raise his voice.

Suddenly! A door, back to the crowd, opens. A man, fine dressed but not as elegant, enters the hall and shouts “We got it! We got it! Come on see! We got it!”.

Most of the crowd don’t even hear him, but someone (the unlucky ones, who haven’t found a chair) want to bet on that guy and follow him.

One by one, one at a time, a hundred leaves the hall and goes find out what was all that enthusiasm about. Some of them come back, to call their friends.

It’s a matter of 10 minutes: lot of noise comes from outside the hall. The most fanatics begin to wake up from their praising trance. They see more and more audience leaving the room and some, as the sheeps do, follow them.

The big heads turn to look at the doors left open.

Someone in the crowd shouts to close those f4*?!£g doors.

Then it happens: Mr. Ipsilon has to interrupt his speech.

Big mistake Mr. Ipsilon! You were told at the marketing master!! “Don’t let them control the conversation!“. Ahh, noo Mr Ipsilon! Look! The big heads are standing up! What?! Where are they going? Lackey! Go to close those f4*?!£g doors immediately!

And can someone please tell me what’s this f4*?!£g OpenOffice about?

Gli utenti windows si dividono in due

Sunday, October 22nd, 2006

Da Punto Informatico:

“Gli utenti Windows si dividono in due: quelli che saltano la EULA cliccando automaticamente su “Accetto”, e quelli che saltano la EULA cliccando automaticamente su “Accetto” incrociando le dita.”

E’ bello sapere di non avere questi problemi :)

I’m onto the Gentoo train

Sunday, October 22nd, 2006

With the struts-1.3.5 ebuild, nichoj offered me access to the Gentoo java overlay.

An overlay is an alternative branch of the official portage tree, where experimental ebuilds are made available to testers and people in a hurry to use an application or have a library.

Of course, “happy” is not a word worth describing my pride.

There are still a LOT of things I have to learn. But I got the patience: hope my team mates have enough of it, too.

The long trip to struts 1.3.5

Saturday, October 21st, 2006

Some version bumps and new ebuilds are required to get to struts-1.3.5 on Gentoo.

It will take more time than initially guessed, damn…

Current stages are:

I hope to get to struts in the next few days.

Linuxwacom drivers 0.7.6 stable

Wednesday, October 18th, 2006

Linuxwacom project has just released the stable 0.7.6-1 version.

They finally made it compatible with Xorg 7.1, so you, gentoo users, won’t have to apply any patch from now on.

And of course, we got the ebuild :)

Assunzione

Tuesday, October 17th, 2006

L’assunzione è il vero costo che nessuno vuole assumersi.

Non sono parole mie. Per quello che ho visto finora, sono vere. E non c’è governo che tenga.

Consultazione pubblica

Monday, October 9th, 2006

Alla fine del mese di Settembre, il ministro Luigi Nicolais, successore di Lucio Stanca, in preparazione del Forum sulla Governance di Internet, ha avviato una consultazione pubblica.
Istituito un comitato (presieduto da Stefano Rodotà), sono stati redatti 4 documenti (”liberta’ di espressione”, “sicurezza”, “rispetto delle diversita’”, “accesso per tutti”) ed stato chiesto ai cittadini di inviare dei contributi.
La consultazione è aperta fino al 22 Ottobre. Per stimolarvi a inviare il vostro contributo, vi allego il mio.

===

Egregi membri del comitato,

condivido i pensieri espressi nel documento “Openness” a proposito dei vantaggi economici dell’adozione del software libero, ma ritengo che essi non si fermino affatto al solo costo delle licenze. La sua adozione da parte della pubblica amministrazione ha consueguenze più estese, riguardanti l’economia e la qualità del servizio infine offerto.
Cercherò di delineare queste conseguenze.
Non volendo parlare specificatamente dell’Italia, nel riferirmi ad entità nazionali intenderò entità italiane ed europee (nel nostro caso) e generiche entità nazionali (in tutti gli altri casi).

La prima conseguenza parte dal presupposto che la modificabilità ed adattabilità del software libero rispetto al software proprietario aumenterebbe il numero di player sul mercato: gran parte di questi player avrebbe natura nazionale, dipendentemente dall’entità del progetto commissionato.
Pertanto il flusso di denaro necessario alla realizzazione/installazione/manutenzione del software assumerebbe la forma di un cerchio, dove il punto di partenza e di fine sarebbero entrambi le casse della nazione committente.
L’entità nazionale commissionata, infatti, verrebbe pagata dalla pubblica amministrazione nazionale. Tale azienda pagherebbe i propri dipendenti i quali, tramite le tasse, porterebbero il denaro nuovamente nelle casse dello stato.
Ciò delinea uno scenario in cui la nazione committente non solo sta risparmiando sul costo delle licenze ma sta effettivamente distribuendo ricchezza ai propri cittadini, finanziando il proprio stesso bilancio.
Al contrario, l’uso di software proprietario, per la situazione attuale del mercato, costringe la nazione committente ad impiegare grosse somme di denaro di cui solo una minima parte rimane all’interno dei confini nazionali: un costo superiore ed un ritorno minimo in termini di tasse.
Questo tema è stato meglio sviluppato [1] dal Prof. Angelo Raffaele Meo, del Politecnico di Torino.

La seconda conseguenza riguarda la qualità del software, in tutte quelle situazioni in cui non è prevista solo una fornitura di prodotti finiti ma anche una vera e propria implementazione.
La vicinanza geografica con l’entità nazionale, commissionata di tale implementazione, permetterebbe alla nazione committente di seguire molto più da vicino lo sviluppo del software richiesto (sia esso un componente originale o un’adattamento di una funzionalità esistente), guadagnando un maggior controllo sul suo sviluppo e maggiori possibilità di modifiche in corso d’opera. Se a questo uniamo la già citata opportunità di modifica del software libero, le probabilità che ciò accada sono positivamente numerose, a tutto vantaggio della qualità del prodotto finale.

I miei più sinceri auguri di buon lavoro ai membri del comitato.

[1] Dal libro “Revolution OS II”, pag. 47, “Software libero: un’opportunità per il paese”

I’ve got an iPod! Ehrr..

Thursday, October 5th, 2006

The iPod got me!

Well, probably that’s the iPod that got me.

Click on the image to know more

“How to be a programmer”: review

Monday, October 2nd, 2006

If there is something most programmers are missing (at least, I miss it) that’s a mentor, a guy who knows what to say and when to say it.

This is, clearly, a problem and lots of books try (even) to solve it, developing more or less specific subjects with different degrees of analysis.

In his 90 pages book (actually 40, when printed on a pdf), Robert L. Read summarize these subjects in a way he wanted to have them when he was 21.

I strongly suggest you to read his “How to be a programmer“, available under the GNU Free Documentation License.

Here are the most impressive sentences I’ve found:

About improvements
What do you do when you start to run out of low-hanging fruit? Well, you can reach higher, or chop the tree down.

About design
Don’t become dogmatic about particular design styles.

About estimate
There are of course, unknown unknowns, or unk-unks. Unk-unks by definition cannot be estimated individually. You can try to create a global line item for all unk-unks, or handle them in some other way that you communicate to your boss. You cannot, however, let your boss forget that they exist, and it is devilishly easy for an estimate to become a schedule without the unk-unks considered.

About estimate
In a team environment, you should try to have the people who will do the work do the estimate, and you should try to have team-wide consensus on estimates. People vary widely in skill, experience, preparedness, and confidence. Calamity strikes when a strong programmer estimates for herself and then weak programmers are held to this estimate.

About time
The basic rule is that everyone benefits from talking to you a little bit, and the more they talk to you, the less benefit they derive. It is your job to provide them this benefit, and to get the benefit of communicating with them, keeping the benefit in balance with the time spent.

It is important to respect your own time. If talking to someone, even if it will cost them time, will save you a great deal of time, then you should do it unless you think their time is more valuable than yours, to the tribe, by that factor.

About documentation
Life is too short to write crap nobody will read; if you write crap, nobody will read it. Therefore a little good documentation is best. Managers often don’t understand this, because even bad documentation gives them a false sense of security that they are not dependent on their programmers. If someone absolutely insists that you write truly useless documentation, say “yes” and quietly begin looking for a better job.

About documentation
[…] write self-explanatory code and only document code in the places that you cannot make it clear by writing the code itself.
There are two good reasons for this. First, anyone who needs to see code-level documentation will in most cases be able to and prefer to read the code anyway. Admittedly, this seems easier to the experienced programmer than to the beginner. More importantly however, is that the code and the documentation cannot be inconsistent if there is no documentation. The source code can at worst be wrong and confusing. The documentation, if not written perfectly, can lie, and that is a thousand times worse.

About time
Programmers often succumb to this because they are eager to please and not very good at saying no.
There are four defenses against this:

  • Communicate as much as possible with everyone in the company so that no one can mislead the executives about what is going on,
  • Learn to estimate and schedule defensively and explicitly and give everyone visibility into what the schedule is and where it stands,
  • Learn to say no, and say no as a team when necessary, and
  • Quit if you have to.

About culture
You can be a good programmer without going to college, but you can’t be a good intermediate programmer without knowing basic computational complexity theory. You don’t need to know “big O” notation, but I personally think you should be able to understand the difference between “constant-time”,”n log n” and “n squared”. You might be able to intuit how to tradeoff time against space without this knowledge, but
in its absence you will not have a firm basis for communicating with your colleagues.

About stress test
The purpose of stress testing is to figure out where the wall is, and then figure out how to move the wall further out.

About abstractness
The final result would have been better if the energy spent on abstraction had been spent on keeping things short and simple.

About learning
When learning a new programming language, try to do a small project it in before you have to do a large project. When learning to manage a software project, try to manage a small one first.

About planning
Make sure you plan includes time for: internal team meetings, demos, documentation, scheduled periodic activities, integration testing, dealing with outsiders, sickness, vacations, maintenance of existing products, and maintenance of the development environment. The project plan can serve as a way to give outsiders or your boss a view into what you or your team is doing. For this reason it should be short and up-to-date.

About meetings
Meetings are sometimes necessary, but smaller is usually better. The quality of communication in small meetings is better, and less time overall is wasted.

About disagreement
Disagreement is a great opportunity to make a good decision, but it should be handled delicately. Hopefully you feel that you have expressed your thoughts adequately and been heard before the decision is made. In that case there is nothing more to say, and you should decide whether you will stand behind the decision even though you disagree with it. If you can support this decision even though you disagree, say so. This shows how valuable you are because you are independent and are not a yes-man, but respectful of the decision and a team player.

About poor code quality
Remember that a good design will be resillient against poor code implementations. If good interfaces and abstractions exist throughout the code, then the eventual rewrites will be far more painless. If it is hard to write clear code that is hard to fix, consider what is wrong with the core design that is causing this.

About software system dependencies
Having the source code for a component decreases the risk by a factor of four. With source code, you can evaluate it easier, debug it easier, find workarounds easier, and make fixes easier. If you make fixes, you should give them to the owner of the component and get the fixes incorporated into an official release; otherwise you will uncomfortably have to maintain an unofficial version.

About software matureness
Here are ten questions you should ask yourself about it:

  1. Is it vapor? (Promises are very immature).
  2. Is there an accessible body of lore about the software?
  3. Are you the first user?
  4. Is there a strong incentive for continuation?
  5. Has it had a maintenance effort?
  6. Will it survive defection of the current maintainers?
  7. Is there a seasoned alternative at least half as good?
  8. Is it known to your tribe or company?
  9. Is it desirable to your tribe or company?
  10. Can you hire people to work on it even if it is bad?

A little consideration of these criteria demonstrates the great value of well-established free software and open-source software in reducing risk to the entrepreneur.

About the “obtain or build” decision
You should think twice before building something that is big enough to serve as the basis for an entire other business. Such ideas are often proposed by bright and optimistic people that will have a lot to contribute to your team.

About growing professionally
Assume responsibility in excess of your authority. Play the role that you desire. Express appreciation for people’s contribution to the success of the larger organization, as well as things as that help you personally.

About interviewees
Good people want to be hired for their skills, not where they worked last or what school they went to or some other inessential characteristic.

About talking to non-technicals
You should assume that you will miscommunicate and watch carefully to find this miscommunication. Try to get them to summarize or paraphrase what you are saying to make sure they understand. If you have the opportunity to meet with them often, spend a little bit of time asking if you you are communicating effectively, and how you can do it better. If there is a problem in communication, seek to alter your own practices before becoming frustrated with theirs.

About vague requirements
It is impossible to satisfy a vague requirement […] If the requirement can be made more crisp, it will often become merely hard […] If there is not crisp definition of success, you will not succeed.

About pressure
Time-to-market pressure is the pressure to deliver a good product quickly. It is good because it reflects a financial reality, and is healthy up to a point. Schedule pressure is the pressure to deliver something faster than it can be delivered and it is wasteful, unhealthy, and all too common.

About users
The more time you spend with users the better you will be able to understand what will really be successful. You should try to test your ideas against them as much as you can. You should eat and drink with them if you can.
Guy Kawasaki[Rules] has emphasized the importance of watching what your users do in addition to listening to them.

About team
Your greatest responsibility is to your team. You should know each of them well. You should stretch your team, but not overburden them. You should usually talk to them about the way they are being stretched. If they buy in to it, they will be well motivated. On each project, or every other project, try to stretch them in both a way that they suggest and a way that you think will be good for them. Stretch them not by giving them more work, but by giving them a new skill or better yet a new role to play on the team.
You should allow people (including yourself) to fail occasionally and should plan for some failure in your schedule.

[…]

It is an odd fact that is not reflected in salaries that a good programmer is more productive than 10 bad programmers. This creates a strange situation. It will often be true that you could move faster if your weak programmers would just get out of the way. If you did this you would in fact make more progress in the short term. However, your tribe would lose some important benefits, namely the training of the weaker members, the spreading of tribal knowledge, and the ability to recover from the loss of the strong members. The strong must be gentle in this regard and consider the issue from all angles.

About team leading
One of the keys to team leadership is to facilitate consensus so that everyone has buy in. This occasionally means allowing your teammates to be wrong. That is, if it does not harm the project too much, you must let some of your team do things their own way, based on consensus, even if you believe with great confidence it is the wrong thing to do. When this happens, don’t agree, simply disagree openly and accept the consensus. Don’t sound hurt, or like you’re being forced into it, simply state that you disagree but think the consensus of the team is more important. This will often cause them to backtrack. Don’t insist that they go through with their initial plan if they do backtrack.

About boring tasks
Try to find some way to get the computer to do the task for you or to help your teammates do this. Working for a week on a program to do a task that will take a week to do by hand has the great advantage of being more educational and sometimes more repeatable.

About system evolution
It is good to think of software as growing, because it allows us to make useful progress before we have a perfect mental image. We can get feedback from users and use that to correct the growth. Pruning off weak limbs is healthful.

About managers’ myths
For that reason, you should recognize these beliefs as myths:

  • More documentation is always better. (They want it, but they don’t want you to spend any time on it.)
  • Programmers can be equated. (Programmers vary by an order of magnitude.)
  • Resources can be added to a late project to speed it. (The cost of communication with the new persons is almost always more taxing than helpful.)
  • It is possible to estimate software development reliably. (It is not even theoretically possible.)
  • Programmers’ productivity can be measured in terms of some simple metric, like lines of code. (If succinctness is power, lines of code are bad, not good.)