PostgreSQL custom aggregate functions

Aggregate functions compute a single result from a set of input values. Like sum() or count() they operate on one or more columns and multiple rows and output a single result.

In PostgreSQL is quite easy to create a custom aggregate function, the ingredients are:

  • Create an aggregate function
  • Create a state update function
  • optional: create a final function

For example, if we want to implement the avg function we can write:

CREATE AGGREGATE avg (float8)
(
    sfunc = float8_accum, -- {_count+=1, _sum+=value}
    stype = float8[],
    finalfunc = float8_avg, -- _sum / _count
    initcond = '{0,0}'
);

Now we need a bit more complex aggregate function to write…

continue…

Se niente importa

Una lettera che ho inviato alla mailing-list degli adulti scout laici CNGEI di Firenze.

From: Matteo Bertini
Date: 8 Sett 2010

Ho da poco finito di leggere un bel libro che vi consiglio:

Se niente importa” di Jonathan Safran Foer

un po’ come il libro che fa smettere di fumare, questo libro mi ha fatto smettere di mangiare carne.

Non solo, mi ha anche fatto riflettere su quanto sia vero e importante impegnarsi oggi a trasmettere ai ragazzi ciò che riteniamo giusto e importante, perché davvero:

“L’unico modo per avere un futuro migliore è crearlo oggi attraverso futuri cittadini migliori.”

Rendiamo più facile la vita ai nostri ragazzi perché possano fare scelte che noi non abbiamo la voglia/forza di fare.

Continua a leggere

Precision, Recall and F1 score (information retrieval)

Suppose we are playing a words game: I think a few words and you have to guess them.
As usually you will ask me some questions, identify the subject and try to guess. A possible end of the game is:

  • I think: rabbit, carrot, orange.
  • You try: dog, carrot, peach, orange.

We can define 2 quantities to synthesize how good you are as this game:

  • precision: is the number of correct guess over the number of tries = 2/4
  • recall: is the number of correct guess over the number of words to guess = 2/3

It’s easy to see that this two numbers are somehow in competition.

Continue…

Tariffa Bioraria, che culo

Oggi ho fatto due conti. Non so se avete anche nelle vostre ultime bollette il conto alla rovescia che porterà alla tariffa bioraria.

L’idea è interessante, premiare chi consuma durante le ore notturne e disincentivare il consumo diurno, infatti il foglio illustrativo dice che si comincia a risparmiare quando il consumo notturno è maggiore del 66% del consumo totale.

C’è un problema, stando molto attenti nell’ultimo bimestre abbiamo spostato la nostra media casalinga da 34% (F1) e 66% (F2+F3) a 30% (F1) e 70% (F2+F3).

Passando alla tariffa bioraria avrei speso 1 € in più in un anno come il bimestre “normale” e 3 € in meno in un anno come il bimestre di attenzioni, attivando la modalità paranoia potremmo arrivare al 75% notturno, ben 6 € l’anno di risparmio!

Spendo di più in Post-It™ con scritto: «Mi accendi la lavatrice quando torni?»¹

Mi si dirà, ma la raccolta differenziata la fai anche se non ti paga nessuno! Si, ma con la raccolta differenziata: 1) in molti paesi civili risparmi eccome, 2) faccio del mio meglio per non lasciare un mondo discarica ai nostri figli.

Una tariffa bioraria che rischia di farmi spendere più di adesso non mi incentiva più della mia morale.

Ovviamente il gestore della rete ci guadagna se i consumi si spostano dal giorno alla notte, perché riesce ad avere una rete più scarica, meno dispersione nel trasporto, meno picchi da soddisfare con generatori meno efficienti, e questo risparmio forse è quello che vediamo in bolletta.

Infatti una tariffa bioraria potrebbe essere stata proposta da una qualsiasi azienda a seguito di una valutazione economica.

Il problema è che queste tariffe sono decise dallo Stato tramite l’AEEG. Però, visto che siamo in Italia e che è probabile che una volta pagati gli stipendi il budget dell’Autorità sia esaurito, una possibile spiegazione della limitata forbice di risparmio sia: «ENEL, che tariffe puoi fare?».

¹) Credits: Martino