Un Napoletano in Sicilia – un mese dopo

Eccoci qui dopo un mese. Seguendo le linee guida della Piramide Inversa (grazie Carlo) inizio dalla notizia più importante in modo che, se sei di fretta, non ti perda il succo del post.

Mi sono trasferito un mese fa in Sicilia. Sto bene, non mi manca nulla, non sono dimagrito (anzi) e non lavoro troppo. Le persone del luogo mi trattano bene, ho qualsiasi negozio mi possa servire sotto casa (anche un negozio di musica) e non fa nemmeno troppo caldo.

Bene se adesso hai qualcosa di più importante da fare, vai pure, tanto quello che seguirà saranno solo vaneggiamenti e qualche foto.

Continue reading

Cosa ho imparato nelle ultime settimane?

Che cosa ho imparato nelle ultime settimane?

  • Che gli altri non possono conoscere le tue intenzioni, se non le espliciti. “È così, ma in realtà pensavo di…” non esiste. Esiste solo quello che è evidente e alla luce del sole.
  • Che non importa quanto studi e quanto sai: la realtà è spesso (più spesso di quanto non ci piaccia ammetterlo) più complicata di quello che ci insegnano trattati e libri. La realtà è così stupendamente illogica che solo scontrandoti con essa puoi dire di sapere veramente.
  • Che in una discussione cercare di capire di chi è la colpa è inutile: meglio mettersi nella condzione di chiedere : “Cosa posso fare per rimediare?”
  • Che, quasi sempre, in una discussione difficile avvengono contemporaneamente tre conversazioni contemporaneamente: una riguardante l’argomento in questione, una riguardante i nostri sentimenti, e una con noi stessi. (Ma di questo parlerò meglio in futuro).

Multiple Sum with different conditions in MySQL

Today I was working on my last project that involves some statistics on data. I had a table like this:

sample table

]1 My table, with time and data fields.

I needed the daily, monthly and yearly sum of the value field. The simplest approach was to have three different queries to retrieve the needed values:

--day
SELECT SUM(value) 
FROM table 
WHERE DATE(time)=CURDATE();
-- month
SELECT SUM(value) 
FROM table 
WHERE MONTH(time)=MONTH(CURDATE()) AND YEAR(time)=YEAR(CURDATE());
-- year
SELECT SUM(value) 
FROM table 
WHERE YEAR(time)=YEAR(CURDATE());

But I wasn’t satisfied. I wanted to have all three values using only one query. So I searched for this issue and this is the resulting query:

SELECT 
  SUM(CASE WHEN DATE(time)=CURDATE() 
    THEN value 
    ELSE 0 end) AS value_day,
  SUM(CASE WHEN MONTH(time)=MONTH(CURDATE()) AND YEAR(time)=YEAR(CURDATE()) 
    THEN value 
    ELSE 0 end) AS value_month,
  SUM(CASE WHEN YEAR(time)=YEAR(CURDATE()) 
    THEN value 
    ELSE 0 end) AS value_year
FROM table

Using the CASE construct, we increment independently the three values so that each row that satisfies the condition gets summed up.

Bob Martin’s Three Laws of TDD

Bob Martin describes Test-Driven Development using these three simple rules:

  1. Do not write production code unless it is to make a failing unit test pass.
  2. Do not write more of a unit test than is sufficient to fail, and build failures are failures.
  3. Do not write more production code than is sufficient to pass the one failing unit test.

Even though this sounds restrictive, it is a very productive and fun way to develop software.

Fonte: http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd

Diario Progetto LASD – 07/11/11

Oggi ho ripreso a lavorare al progetto per il corso di Laboratorio di Algoritmi e strutture dati.

Tra le cose che ho fatto:

  • Aggiunta possibilità di estrazione dalla testa della lista, nella libreria lista
  • Creata l’interfaccia per la gestione di un insieme di vertici
  • Iniziata la prima bozza per la versione dell’insieme di vertici basato su array

Per quanto riguarda l’ultimo punto ho creato una struct così formata:

struct jvset_tag
{
    J_VERTEX **Vertices;   /**< Array contenente i vertici */
    int NumActiveVertices; /**< Numero di vertici inseriti nell'insieme */
    int NextFreeIndex;     /**< Indice della prossima locazione libera */
    int Size;              /**< Numero totale di vertici */
    J_LIST *FreeList;      /**< Lista delle locazioni libere */
};

Ho scritto anche le funzioni per la gestione dell'inizializzazione dell'insieme e per la relativa deallocazione.

Il prossimo passo è scrivere le funzioni di aggiunta e rimozione dei vertici.

Sto pensando però che forse dovrei tenere traccia anche delle locazioni dell'array occupate, e non solo di quelle libere, per permettere di effettuare la visita solo sui vertici effettivamente inseriti e non su tutta la dimensione dell'array.

Joel Spolsky on hiring

Quote

Two of the biggest challenges in technical hiring are identifying people who are smart but don’t get things done and people who get things done but aren’t smart. A company in a competitive industry needs to avoid hiring both classes of people.

“People who are smart but don’t get things done often have PhDs and work in big companies where nobody listens to them because they are completely impractical,” explains Spolsky.

“People who get things done but are not smart will do stupid things, seemingly without thinking about them, and somebody else will have to come clean up their mess later.”

Tratto da: How would you move mount Fuji? di William Poundstone.

Douglas Crockford on features

Quote

We see a lot of feature-driven product design in which the cost of features is not properly accounted. Features can have a negative value to consumers because they make the products more difficult to understand and use.

We are finding that people like products that just work. It turns out that designs that just work are much harder to produce than designs that assemble long lists of features.

Features have a specification cost, a design cost, and a development cost. There is a testing cost and a reliability cost. The more features there are, the more likely one will develop problems or will interact badly with another.