La trasparenza delle tariffe

July 12th, 2008

dalla pagina Tim Tutto Incluso per iPhone:

Con Tutto Incluso per iPhone 3G avrai sempre:

  • […]
  • 1GB o traffico illimitato per navigare in Internet (apn ibox.tim.it) (nota 2)
  • […]

la nota 2:

Nota 2. Al fine di limitare utilizzi impropri, il traffico non potrà essere superiore a 5 GB al mese.

5 GB è un po’ diverso da illimitato!

Google Streetview Italia è online

July 5th, 2008

Molti hanno notato le google-car a Roma o Milano, ma a
Colletto Fava è passata inosservata!

Google Street View Milano

April 17th, 2008

Girando per il fuori salone, mi sono imbattuto in una delle fantomatiche Google-mobile che Google usa per fotografare le strade. Avremo quindi presto la funzione Street View per Milano.

Google’s car

Ironicamente, l’autista di GoogleMaps aveva sbagliato strada, trovandosi imbottigliato nel traffico.

Google’s car

every() functionality in jQuery

April 15th, 2008

Sometimes you need to check every elements in an array against a function.

Javascript 1.5 provides every() and some() extensions to arrays, but for the average user, JS 1.5 isn’t here, yet.

So I wrote a plugin for jQuery providing these functionalities.

You can download at jquery-every GoogleCode page.

Quei designers furbetti

January 28th, 2008

Uscendo dal poli, un messaggio in bacheca attira la mia attenzione.

Inneggiava ad una colorita protesta ad un articolo scritto da un mio ex professore, che cito qui di seguito:

Ha ragione il New York Times. Non siamo più antichi. Siamo vecchi. Non è questione d’età. Si è vecchi perché non si hanno più sogni e speranze.

Lo dico con grande tristezza e senso di impotenza. Penso ai miei studenti al Politecnico di Milano, corso di Metaprogetto, Dipartimento di Architettura, Master in Design della Comunicazione. Splendidi nei loro vent’anni, ma grigi. Preoccupati. Sorridono poco, ridono meno. Sono dei creativi, hanno talento, intelligenza. Nessuno di loro ha mai sofferto la fame. Vivono in uno splendido Paese, tuttavia non sognano. Se sognano non lo raccontano. Non vivono i loro sogni. Sono parcheggiati per tre anni, oppure tre anni più due nel grande parcheggio che è l’università per conseguire un titolo di studio. Già. Strano Paese il nostro dove la laurea ha valore legale. Quando è che ci si armonizzerà con il resto del mondo? Lasciamo perdere. La loro preoccupazione non è cosa imparare per aprirsi un mondo di opportunità basato sulle loro competenze e abilità. No. L’importante è il voto. Il professore di turno che non insegna però elargisce trenta a piene mani è certamente più seguito e popolare di quello che prepara lezioni, prove pratiche, esercitazioni, invita ospiti, organizza seminari ed è attento alla valutazione finale. Lo studente più ammirato non è quello che studia, è quello che fa il furbo. Copiare è segno d’intelligenza. Imbrogliare un dovere. Mentire un obbligo. Anche perché sono certi che il mondo reale, quello del lavoro è un luogo dove si accede solo per raccomandazioni, calci, amicizie o favori sessuali.

Non parteciperò alla protesta, in quanto mi sembra molto più utile partecipare alla discussione. E comunque su un paio di punti sono anche d’accordo.

Andiamo con ordine:

Sorridono poco, ridono meno. Sono dei creativi, hanno talento, intelligenza. Nessuno di loro ha mai sofferto la fame. Vivono in uno splendido Paese, tuttavia non sognano. Se sognano non lo raccontano.

Su questo sono abbastanza d’accordo. D’altra parte, non è che ci sia granché da sognare: dopo 30 anni di sacrifici i nostri genitori sono riusciti a comprare una casa, alcuni sono addirittura in pensione. Noi sappiamo che dopo 30 anni di mutuo, al massimo ci ritroviamo un bilocale in periferia, non esattamente il posto dei sogni per crescere i propri figli. Sarà molto difficile vantarci con loro dell’avergli dato una vita migliore di quanto non fosse la nostra. Bè, però sogniamo ancora una pensione.

Non vivono i loro sogni. Sono parcheggiati per tre anni, oppure tre anni più due nel grande parcheggio che è l’università per conseguire un titolo di studio. Già. Strano Paese il nostro dove la laurea ha valore legale.

Sinceramente, non capisco il termine parcheggiati. Nel senso che non lavoriamo durante l’università? Che se avessimo il tempo di lavorare, staremmo ancora a chiedere i soldi a mamma a 20 e rotti anni?

L’importante è il voto. Il professore di turno che non insegna però elargisce trenta a piene mani è certamente più seguito e popolare di quello che prepara lezioni, prove pratiche, esercitazioni, invita ospiti, organizza seminari ed è attento alla valutazione finale. Lo studente più ammirato non è quello che studia, è quello che fa il furbo. Copiare è segno d’intelligenza. Imbrogliare un dovere. Mentire un obbligo. Anche perché sono certi che il mondo reale, quello del lavoro è un luogo dove si accede solo per raccomandazioni, calci, amicizie o favori sessuali.

Sinceramente, non mi riconosco per niente in questo profilo. Nè riconosco alcuno dei miei compagni.

Non escludo esistano studenti di questa pasta. I pelandroni sono sempre esistiti.

Non nego neanche che esistano docenti i quali esami siano estremamente facili da passare. Nella mia carriera ne ho incontrato soltanto uno, ma di lui mi rimane solo un nome.

Stimo la conoscenza che ha della sua materia, ma non posso essergli grato di nulla. Sono invece molto grato a tutti gli altri miei docenti, che in cinque anni mi hanno fatto crescere non solo professionalmente, ma anche culturalmente ed eticamente.

Li ringrazio per tutte le volte che mi hanno messo in crisi, per tutti quei votacci che mi hanno spinto a stare alzato la notte per fare di più.

E francamente, ad averci avuto tutti 30, non sarebbe stato altrettanto divertente :)

L’Università non è un avviamento professionale. Non lo è mai stata, non è nata come tale. Ma quando è nata questa contorta idea? Ce lo vedete Dante, che si iscrive all’Alma Mater ‘per non facer lo chontadino’.

A quanto pare tutti gli studenti di Aparo hanno fatto un imbarazzante errore: Il politecnico NON È LO IED.

È invece un lungo e travagliato percorso di crescita personale. Non si impara a fare il Designer, al poli. Si impara ad ESSERE un designer. Pensare come tale, agire da.

Se la mia priorità fosse stata trovare un lavoro, non mi sarei mica iscritto a Design! Economia e Commercio mi avrebbe dato più possibilità. Ma anche Architettura. O Ingegneria. Inoltre, per chi cerca un lavoro, avere una laurea per una professionalità nemmeno riconosciuta (l’Albo dei Designer non esiste) non è certo una scelta furba!

La priorità è nella crescita, nel soddisfare la morbosa curiosità che ogni designer ha dal suo primo giorno di vita. Ed i docenti della Facoltà del Design hanno sempre svolto l’ottima missione non di dare risposte, ma di far nascere domande.

Se quanto dice Aparo è vero, provo una gran pena per questi miei colleghi. Non potrebbero essere in un posto più sbagliato.

Nodebox on Leopard

November 1st, 2007

I succeeded at running Nodebox on Leopard.

I had to recompile it against Python 2.5 on Tiger, in full stand-alone mode (i.e. it includes python’s executable), but it runs on Leopard, too!

I’ve opened ticket #110 and created a diff, too.

If you need it, you can grab Nodebox for Leopard here.

[update] This version will execute your code, visualizing your graphics, but it can't export because the EasyDialog module doesn't work on Python 2.5. Frederik De Bleser is working on this.

[update #2] I tried to replace EasyDialog with CocoaDialog, and exports work in Tiger, but I can't test on Leopard until Monday. You can download it here, and tell me if it works.

[update #3] These files are now obsolete, you can download the official Nodebox 1.9.2 from Nodebox website.

I linguaggi di programmazione come correnti artistiche

September 27th, 2007

Come ha ben sottolineato John Maeda, l’utilizzo del computer come mero surrogato di strumenti fisici (foglio, penna ecc.) pone grossi limiti alle sue potenzialità1. È necessario utilizzare dunque il calcolatore in maniera consona alla sua natura: scrivendo software, progettando il processo che porterà al risultato finale.

Sembra dato per scontato che questo risultato finale (un manifesto, un libro, un qualsiasi artefatto) possa avere anche una valenza artistica.

Ma il lavoro di un designer consiste nello sviluppare processi e sistemi, e sempre più spesso la sua progettazione lo porta a scrivere del software.

Anche questo software ha una sua valenza artistica, poiché in esso possiamo riconoscere il segno, le idee e la filosofia di progetto unici di che lo ha scritto.

Programmare è un’arte. Al pari dell’architettura, si tratta di costruire un edificio che dovrà fornire soluzioni a dei problemi, molti dei quali ancora da scoprire.

La storia, ed ancor più il presente, dei linguaggi di programmazione, è identica alle storie della pittura, della scultura e dell’architettura: è un continuo sviluppo di punti di vista, approcci e soluzioni; la loro critica, ed il conseguente sviluppo di ulteriori punti di vista, approcci e soluzioni. Un ciclo che si ripete, critica dopo critica, iterazione dopo iterazione.

Dalla critica nascono le scelte operate da ogni linguaggio di programmazione, che ne definiscono le modalità d’espressione dei concetti, ovvero la sua Estetica.

Se ci pensiamo, è stato sempre così: gli impressionisti con gli accademici, gli espressionisti con gli impressionisti, e così via.

Breve storia semplicistica

I primi linguaggi di programmazione (1950-60: Fortran, LiSP, Cobol, Basic) formano la base da cui hanno origine quelli oggi più diffusi2. La generazione successiva (1960-70: Pascal, C, Simula e più tardi SmallTalk), introdusse i paradigmi fondamentali della programmazione (programmazione ad oggetti, funzionale, ecc.); dai dibattiti su di essi nascono tutte quelle differenze che sono alla base degli oltre 2500 linguaggi odierni.

Decisioni, decisioni, decisioni

Gli astrattisti scelsero di rifiutare il figurativismo, e le loro opere, le loro tecniche e la loro Estetica sono frutto di questa scelta.

Come le Arti, anche i linguaggi si differenziano per tecnica e per estetica.

Come le correnti artistiche, ogni linguaggio di programmazione ha reagito ai suoi predecessori e contemporanei, rifiutando ciò che di volta in volta ritenesse sbagliato ed ingiusto.

Tecnica ed estetica, peculiari per ogni linguaggio, derivano dalle scelte che l’autore (o gli autori) del linguaggio operano al momento della progettazione: scelte motivate non solo da cosa viene apprezzato o disprezzato in altri linguaggi, ma anche da quali valori vengono considerati prioritari: comodità e velocità d’uso? oppure massime performance durante l’esecuzione? leggibilità del codice sorgente? coerenza del linguaggio? sicurezza? purismo formale?

A titolo esemplificativo, possiamo confrontare due linguaggi radicalmente diversi, come il C e Python3

In C, l’enfasi è posta sulle prestazioni (in termini di velocità di calcolo) del programma. Per questo motivo, ogni variabile va dichiarata prima di poterle assegnare un valore, indicandone esplicitamente il tipo (intero, stringa, ecc)4 5, sacrificandone in parte comodità e facilità d’uso del linguaggio.

Al contrario, in Python la leggibilità del codice sorgente è considerata prioritaria rispetto all’esecuzione, pertanto è possibile assegnare immediamente un valore alla variabile, che assumerà implicitamente il tipo del valore assegnatole6. L’allocazione delle variabili e la gestione della loro memoria viene demandata al compilatore, a scapito della velocità.

Ciò che alcuni considerano un pregio, per altri può essere in difetto: per questo non esistono linguaggi migliori di altri. Ognuno ha i suoi punti deboli, che derivano appunto dalle opinioni e dalle decisioni prese sulla base di esse.

Estetica

Dalle scelte e dai valori di riferimento di un particolare linguaggio ne conseguono le sue peculiari caratteristiche. Attraverso esse, il programmatore è incentivato (ed in alcuni casi volutamente costretto) ad utilizzare particolari strutture piuttosto che altre.

Riprendendo il confronto tra C e Python, uno stesso costrutto FOR appare visivamente molto differente:

in Python:

for i in range(100):
    do_something()

in C:

int i;

for (i=0;i<100;i++)
{
    doSomething();
}

Questo contribuisce a creare l'estetica tipica di ogni linguaggio, che lo contraddistingue dagli altri. Ad esempio, è diffusa l'opinione che Java implichi uno stile 'barocco', mentre Perl sia 'ermetico'.

// Hello World in Java

import java.io.*;
class HelloWorld {
  static public void main( String args[] ) {
    System.out.println( "Hello World!" );
  }
}

È infatti anche piuttosto comune l'uso di aggettivi come 'Pythonic', 'Javaesque' o 'Perlish', per indicare un certo stile ad una data porzione di codice7.

Il segno è così costituito dal codice stesso.

Ad un livello più basso, possiamo riconoscere dei pattern visivi negli a capi, nei rientri, nei costrutti utilizzati, nei caratteri di fine riga.

# Hello world in perl

print "Hello World!\n";
# Hello World in Python
print "Hello World"
<?php
  // Hello World in PHP
  echo 'Hello World!';
?>

Questi, formando funzioni, classi, moduli e convenzioni, creano la struttura generale del codice, che ne eredita il segno elevandolo ad un'evidente estetica:

import math

class MyClass(float):
    def __init__(self, value):
        self.value = value
    def get_cube(self):
        return math.pow(self.value,2)

a = MyClass(3)
return MyClass.get_cube() == 9:
<?php
  require("mylibraries.inc")

  class MyClass
  {
      function SetValue($value) {
          $this->

Questo contribuisce a creare l’estetica tipica di ogni linguaggio, che lo contraddistingue dagli altri. Ad esempio, è diffusa l’opinione che Java implichi uno stile ‘barocco’, mentre Perl sia ‘ermetico’.

// Hello World in Java

import java.io.*;
class HelloWorld {
  static public void main( String args[] ) {
    System.out.println( "Hello World!" );
  }
}

È infatti anche piuttosto comune l’uso di aggettivi come ‘Pythonic’, ‘Javaesque’ o ‘Perlish’, per indicare un certo stile ad una data porzione di codice7.

Il segno è così costituito dal codice stesso.

Ad un livello più basso, possiamo riconoscere dei pattern visivi negli a capi, nei rientri, nei costrutti utilizzati, nei caratteri di fine riga.

# Hello world in perl

print "Hello World!\n";
# Hello World in Python
print "Hello World"
<?php
  // Hello World in PHP
  echo 'Hello World!';
?>

Questi, formando funzioni, classi, moduli e convenzioni, creano la struttura generale del codice, che ne eredita il segno elevandolo ad un’evidente estetica:

import math

class MyClass(float):
    def __init__(self, value):
        self.value = value
    def get_cube(self):
        return math.pow(self.value,2)

a = MyClass(3)
return MyClass.get_cube() == 9:
<?php
  require("mylibraries.inc")

  class MyClass
  {
      function SetValue($value) {
          $this->value = $value;
      }
      function GetCube() {
          return pow($this->value, 2);
      }
  }

  $a = new MyClass;
  $a->SetValue(3);
  return ($a->GetCube() == 9);
?>

Bibliografia

http://en.wikipedia.org/wiki/History_of_programming_languages


Footnotes:

1. John Maeda, Maeda @ Media, Thames&Hudson, 2000.

2. In realtà Lisp, sviluppato nel 1958, introduce già dei paradigmi come la programmazione ad oggetti e la tipazione dinamica, che inizieranno a diffondersi solo molto più avanti. Come esempio di quanto Lisp fosse precursore dei suoi tempi, è opportuno notare che oggi è usato anche in ambiti come la programmazione web (il sito reddit.com, per esempio, è scritto in Lisp), inimmaginabile nel 1958.

3. Il confronto ha senso solo a livello del codice sorgente, tant’è che l’interprete Python è scritto in C. È inoltre possibile integrare codice C in Python e viceversa, per ottenere il meglio (o il peggio, a seconda dei punti di vista) di entrambi i mondi.

4. Occorre comunque tener presente che Python nasce molto tempo dopo C.

5. Un linguaggio di questo tipo viene definito staticamente tipato.

6. Un linguaggio di questo tipo viene definito dinamicamente tipato.

7. Martijn Faassen, What is Pythonic?
http://faassen.n—tree.net/blog/view/weblog/2005/08/06/0

Grafica Generativa con Python (parte I)

March 24th, 2007

In questo breve articolo, muoverò i primi passi che mi consentiranno di creare applicazioni di grafica generativa con Python. Non sarà ancora un hello world, cerco prima di avere un foglio su cui scrivere.

Farà uso della libreria CoreGraphics, disponibile solo su Os X 10.4.

È necessario utilizzare python2.3 e NON superiore, poiché la libreria è compatibile solo con questa versione.

CoreGraphics in realtà non è altro che un semplice wrapper per la omonima libreria in Obj-C.

Se avete installato i Developer Tools, la documentazione è disponibile, insieme ad un po’ di esempi, nella cartella /Developer/Examples/Quartz/Python/.

Provo a creare un documento

  1. Apro l’interprete di comandi e importo la libreria.

    $ python2.3
    Python 2.3.5 (#1, Aug 19 2006, 21:31:42)
    [GCC 4.0.1 (Apple Computer, Inc. build 5363)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from CoreGraphics import *
    
  2. Creo un rettangolo, che userò in seguito come pagina.

    Questo rettangolo non è da intendersi come ‘disegno’ di un rettangolo, bensì come una pura forma rettangolare.

    >>> pageRect = CGRectMake(0,0,200,200)
    

    Le unità di misura sono in pixel.

  3. Ora creo un contesto PDF dello stesso formato, che avrà come destinazione un file.

    out = CGPDFContextCreateWithFilename('/out.pdf', pageRect)
    
  4. Ora inizio una pagina:

    >>> out.beginPage(pageRect)
    
  5. e la concludo:

    >>> out.endPage()
    
  6. Finito tutto, chiudo il mio contesto, generando l’output su disco:

    >>> out.finish()
    

Se apro il file che viene generato da quest’ultimo comando, vedo che ha solo una pagina.

Provo a creare un documento con più pagine.

La sequenza beginPage() / endPage() racchiude una pagina. Con più sequenze posso generare documenti multipagina.

>>> from CoreGraphics import *
>>> pageRect = CGRectMake(0,0,1000,1000)
>>> pdf = CGPDFContextCreateWithFilename('/out.pdf', pageRect)
>>> pdf.beginPage(pageRect)
>>> pdf.endpage()
>>> pdf.beginPage(pageRect)
>>> pdf.endPage()
>>> pdf.finish()

Ora ho un pdf di due pagine.

Cosa succede se provo a riutilizzare il contesto dopo averne chiudo il flusso?

>>> pdf.beginPage(pageRect)
CGContextFlush: invalid context

Come immaginavo, genera un errore: invalid context.


Nelle prossime puntate:

  1. testo
  2. curve
  3. colori

Stencil Triennale Bovisa

November 19th, 2006

Dopo aver ricevuto le autorizzazioni del comune, al primo giorno utile di non-pioggia abbiamo iniziato ad applicare la segnaletica per la Triennale Bovisa.

nuvola

Ringraziamo tutti i residenti della Bovisa: curiosi, educati, e molto tolleranti, hanno offerto spunti su come un progetto di segnalitica vada ad influenzare la vita quotidiana delle persone.

flavio stencil stencil nuvola

marco e tommy acetati

Purtroppo, causa prematuro esaurimento scorte, ci siamo dovuti fermare a ¾ del lavoro, ma contiamo di ultimare i lavori domani sera.

Potete vedere tutte le foto degli stencil su flickr.

L’inaugurazione sarà martedì a partire dalle 22. Ci vediamo lì! :D

il blog di kanel

April 26th, 2006

La mia amica creativa Kanel ha aperto un blog.