SlideShare a Scribd company logo
SPyppolare o non sPyppolare?

                   a script by
           Federico Di Gregorio

  Pycon Italia Qu4ttro – Firenze 8,9 maggio 2010
A                                                   A
SPyppolare o non sPyppolare?

                    a script by
            Federico Di Gregorio

   Pycon Italia Qu4ttro - Firenze 8,9 maggio 2010
A                                       H
Nella bella Firenze,
dove noi collochiam la nostra scena,
molti linguaggi di pari nobiltà;
ferocemente gli uni agli altri oppone
da vecchia ruggine nuova contesa,
onde codice sublime va macchiando
chiarissimi fosfori.                    i
Molti Linguaggi
●
    Perché la azienda (per la quale, ovviamente,
    lavoriamo) ce lo impone.
●
    Perché non tutti i problemi sono chiodi.
●
    Perché non tutti i chiodi sono problemi.
●
    Perché “Erlang fa ma se vuoi fare questo e quello
    allora non puoi farne a meno...”
Relax Programming
Dramatis Personae - Basso Livello




                            C
Dramatis Personae – Java XP
Dramatis Personae – ???
Dramatis Personae – Sigh!
Programmare “Enterprise”
Programmare “Enter-Pool”
PyPremessa
Quelle parti del linguaggio che già sono Pythoniche
non ci interessano più di tanto.


[x * x for x in get_all_xs()]


from x in get_all_xs() select x * x;


                                              L
PyVantaggi
Andiamo ad elencare i vantaggi del Python...
●
    Compatto e leggibile
●
    Mix imperativo e funzionale
●
    Dooolce! (nel senso di zucchero sintattico)
●
    Se non puoi risolvere un problema: aggiralo!
    ●
        “Sei il GIL non si scrosta, scrostiamo i thread.”
PyEsempi
Tre esempi che a me piacciono molto:
●
    nevow stan, per la generazione di HTML
●
    Stackless Python
●
    multiprocessing, per parallelizzare
    execnet (solo perché l'ho visto ieri...)


                                               Q
●
Dominare il DOM
head = document.createElement(“head”)
title = document.createElement(“title”)
title.innerHTML = “Questo NON è stile!”
head.appendChild(title)
document.rootElement.appendChild(head)
body = document.createElement(“body”)
document.rootElement.appendChild(body)
...
PyStile
from nevow import flat, tags as T
html = T.html[
  T.head[“Questo è Stile!”],
  T.body[T.p(class=”red”)[
     “E questo è un paragrafo rosso e stiloso...”,
     lambda ctx, data: “...e funzionale!” ]]]
print flat.flatten(html)
“<html><head>Questo è stile!</head><body>...”
PyStile#
using Tesseract.Html;
var T = new HtmlTemplate(); var html =
  T.head()[“Questo è Stile#!”],
  T.body()[T.p(“class”, ”red”)[
    “E questo è un paragrafo rosso e stiloso...”,
    (ctx, data) => “...e funzionale!” ]]]
Console.WriteLine(html.ToString());
“<html><head>Questo è stile!</head><body>...”
Stackless
●
    Modifiche all'interprete per supportare “tasklets”.
●
    Ovviamente non possiamo modificare XXX.
●
    Il pattern d'uso più comune consiste nell'avere un
    alto numero di tasklets che collaborano.
●
    Twisted fa più o meno la stessa cosa coi generator.
                    Mumble mumble...
My Name is I, IEnumerable
public class Agent007 {
  Public Agent007(Scheduler s, Queue kills) {
      this.kills = kills; this.scheduler = s; s.AddTask(Investigate());
  }
  IEnumerable Investigate() {
      if (LocateSpectreAgent()) {
          this.kills.Push(1); yield return Kill();
      }
      yield return DrinkMartini();
  }
My Name is I, IEnumerable (2)
    IEnumerable Kill() {
        this.schedule.AddTask(new KillAnimation(this).Start());
    }
    IEnumerable DrinkMartini() {
        yield return new Timespan(2);
    }
    IEnumerable MeetBeautifulWoman() {
        yield return new Signal(“randezvous”);


                                                           B
    }
}
multiprocessing
●
    Utilizzo delle caratteristiche esistenti del sistema
●
    API simile a quelle già esistenti (threading)
●
    Rimozione dello stato condiviso
●
    Primitive di sincronizzazione esplicite
                           MA
Di nascosto la libreria fa tutto ciò che voi non fate!
“square-reduce”
def square_range(q, a, b):


                                  D
    for x in xrange(a, b):
      q.put(x*x)


q = Queue()
p1 = Process(target=square_range, args=(q,0,1000))
p2 = Process(target=square_range, args=(q,1000,2000))
…
# Recuperiamo i dati qui...
“square-reduce-faster”
def square_range(q, a, b):
    result = [x * x for x in xrange(a, b)]
    q.put(result)


q = Queue()
p1 = Process(target=square_range, args=(q,0,1000))
p2 = Process(target=square_range, args=(q,1000,2000))
…
# Recuperiamo i dati qui...
“square-reduce-done-right”
●
    Incredibile quanto in passato le librerie per il
    multithreading si siano concentrate sulle primitive.
●
    Semantica che non richieda lock espliciti.


Parallel.Range(1,1000000)
    .Select(x => x * x)
    .Sum();
Duck Typing...

                  PyQuack!
                    PyQuack!




    ...is sexy!
Quack! Quack!



“When I see a bird that walks like a duck and swims
 like a duck and quacks like a duck, I call that bird a
                       duck.”
Hiss! Hiss!


Se vedo un serpente che striscia come un Pytone, che
 sibila come un Pyton e che si programma come un
       Pytone, non é detto che sia un Pytone.
Ma il fatto che ci assomigli mi rende molto, molto,
                    molto felice!
The End

Federico Di Gregorio
   <fog@initd.org>

More Related Content

PDF
2006 Py03 intermedio
PDF
2008 python
PDF
2006 Py02 base
KEY
Pycrashcourse
PPTX
Python@Unina - Theory
PDF
Introduzione a Python
PPTX
2011.02.19 Introducing F#
PPT
Corso c++
2006 Py03 intermedio
2008 python
2006 Py02 base
Pycrashcourse
Python@Unina - Theory
Introduzione a Python
2011.02.19 Introducing F#
Corso c++

What's hot (20)

PDF
LINQ, Entities Framework & ORMs
PDF
Pillole di C++
PDF
2006 Py04 avanzato
PDF
Ruby in 25 minuti
PPT
PHP: strutture di controllo e funzioni
PDF
Puntatori e Riferimenti
KEY
Pycrashcourse3.1
PDF
Gestione della memoria in C++
PDF
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
PDF
Py t2 python-moduli
PDF
Py t1 python-intro
PDF
Corso Python 2020 - Lezione 2
PPT
PHP:funzioni e interazione con MySQL
KEY
Pycrashcourse3.0
PDF
Corso python 2020 - Lezione 1
PDF
PHP 7 - benvenuto al futuro
KEY
Corso Python Deltapromo lezione 1
PPT
05 1 intro-struttura
PPTX
Scala: come recuperare la programmazione funzionale e perché
LINQ, Entities Framework & ORMs
Pillole di C++
2006 Py04 avanzato
Ruby in 25 minuti
PHP: strutture di controllo e funzioni
Puntatori e Riferimenti
Pycrashcourse3.1
Gestione della memoria in C++
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Py t2 python-moduli
Py t1 python-intro
Corso Python 2020 - Lezione 2
PHP:funzioni e interazione con MySQL
Pycrashcourse3.0
Corso python 2020 - Lezione 1
PHP 7 - benvenuto al futuro
Corso Python Deltapromo lezione 1
05 1 intro-struttura
Scala: come recuperare la programmazione funzionale e perché
Ad

Viewers also liked (13)

PDF
Feed back report 2010
PDF
Undici anni di lavoro con Python
PDF
Qt mobile PySide bindings
PDF
socket e SocketServer: il framework per i server Internet in Python
PDF
Python idiomatico
PDF
Python: ottimizzazione numerica algoritmi genetici
PDF
zc.buildout: "Un modo estremamente civile per sviluppare un'applicazione"
PDF
Crogioli, alambicchi e beute: dove mettere i vostri dati.
PDF
Os Goodger
PDF
Django è pronto per l'Enterprise
PDF
Effective EC2
PDF
OpenERP e l'arte della gestione aziendale con Python
PDF
Foxgame introduzione all'apprendimento automatico
Feed back report 2010
Undici anni di lavoro con Python
Qt mobile PySide bindings
socket e SocketServer: il framework per i server Internet in Python
Python idiomatico
Python: ottimizzazione numerica algoritmi genetici
zc.buildout: "Un modo estremamente civile per sviluppare un'applicazione"
Crogioli, alambicchi e beute: dove mettere i vostri dati.
Os Goodger
Django è pronto per l'Enterprise
Effective EC2
OpenERP e l'arte della gestione aziendale con Python
Foxgame introduzione all'apprendimento automatico
Ad

Similar to Spyppolare o non spyppolare (20)

PPTX
What is new in C# 2018
PDF
Lezione 12 (28 marzo 2012)
PPT
Riepilogo Java C/C++
PDF
Vogliamo programmatori stupidi e pigri!
PDF
Pycrashcourse4.0 pdfjam
PDF
Lezione 12 (28 marzo 2012)
PDF
Acadevmy - TypeScript Overview
PPTX
Rest sdk
PPT
R Vectors
PDF
Bash intro
PDF
Javascript - 7 | WebMaster & WebDesigner
PDF
Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014
PDF
Cattive abitudini e-lineeguida
PDF
Linux@Unina
PPT
La Grafica Con Java
PDF
Sviluppo web dall'antichità all'avanguardia e ritorno
KEY
Pycrashcourse2.0
PDF
Python - Primi passi
PPT
5 Strutture Iterative
PDF
Functional Programming per tutti
What is new in C# 2018
Lezione 12 (28 marzo 2012)
Riepilogo Java C/C++
Vogliamo programmatori stupidi e pigri!
Pycrashcourse4.0 pdfjam
Lezione 12 (28 marzo 2012)
Acadevmy - TypeScript Overview
Rest sdk
R Vectors
Bash intro
Javascript - 7 | WebMaster & WebDesigner
Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014
Cattive abitudini e-lineeguida
Linux@Unina
La Grafica Con Java
Sviluppo web dall'antichità all'avanguardia e ritorno
Pycrashcourse2.0
Python - Primi passi
5 Strutture Iterative
Functional Programming per tutti

More from PyCon Italia (8)

PDF
Python in the browser
PDF
PyPy 1.2: snakes never crawled so fast
PDF
PyCuda: Come sfruttare la potenza delle schede video nelle applicazioni python
PDF
New and improved: Coming changes to the unittest module
PDF
Monitoraggio del Traffico di Rete Usando Python ed ntop
PDF
Jython for embedded software validation
PDF
Comet web applications with Python, Django & Orbited
ZIP
Cleanup and new optimizations in WPython 1.1
Python in the browser
PyPy 1.2: snakes never crawled so fast
PyCuda: Come sfruttare la potenza delle schede video nelle applicazioni python
New and improved: Coming changes to the unittest module
Monitoraggio del Traffico di Rete Usando Python ed ntop
Jython for embedded software validation
Comet web applications with Python, Django & Orbited
Cleanup and new optimizations in WPython 1.1

Spyppolare o non spyppolare

  • 1. SPyppolare o non sPyppolare? a script by Federico Di Gregorio Pycon Italia Qu4ttro – Firenze 8,9 maggio 2010
  • 2. A A SPyppolare o non sPyppolare? a script by Federico Di Gregorio Pycon Italia Qu4ttro - Firenze 8,9 maggio 2010
  • 3. A H Nella bella Firenze, dove noi collochiam la nostra scena, molti linguaggi di pari nobiltà; ferocemente gli uni agli altri oppone da vecchia ruggine nuova contesa, onde codice sublime va macchiando chiarissimi fosfori. i
  • 4. Molti Linguaggi ● Perché la azienda (per la quale, ovviamente, lavoriamo) ce lo impone. ● Perché non tutti i problemi sono chiodi. ● Perché non tutti i chiodi sono problemi. ● Perché “Erlang fa ma se vuoi fare questo e quello allora non puoi farne a meno...”
  • 6. Dramatis Personae - Basso Livello C
  • 12. PyPremessa Quelle parti del linguaggio che già sono Pythoniche non ci interessano più di tanto. [x * x for x in get_all_xs()] from x in get_all_xs() select x * x; L
  • 13. PyVantaggi Andiamo ad elencare i vantaggi del Python... ● Compatto e leggibile ● Mix imperativo e funzionale ● Dooolce! (nel senso di zucchero sintattico) ● Se non puoi risolvere un problema: aggiralo! ● “Sei il GIL non si scrosta, scrostiamo i thread.”
  • 14. PyEsempi Tre esempi che a me piacciono molto: ● nevow stan, per la generazione di HTML ● Stackless Python ● multiprocessing, per parallelizzare execnet (solo perché l'ho visto ieri...) Q ●
  • 15. Dominare il DOM head = document.createElement(“head”) title = document.createElement(“title”) title.innerHTML = “Questo NON è stile!” head.appendChild(title) document.rootElement.appendChild(head) body = document.createElement(“body”) document.rootElement.appendChild(body) ...
  • 16. PyStile from nevow import flat, tags as T html = T.html[ T.head[“Questo è Stile!”], T.body[T.p(class=”red”)[ “E questo è un paragrafo rosso e stiloso...”, lambda ctx, data: “...e funzionale!” ]]] print flat.flatten(html) “<html><head>Questo è stile!</head><body>...”
  • 17. PyStile# using Tesseract.Html; var T = new HtmlTemplate(); var html = T.head()[“Questo è Stile#!”], T.body()[T.p(“class”, ”red”)[ “E questo è un paragrafo rosso e stiloso...”, (ctx, data) => “...e funzionale!” ]]] Console.WriteLine(html.ToString()); “<html><head>Questo è stile!</head><body>...”
  • 18. Stackless ● Modifiche all'interprete per supportare “tasklets”. ● Ovviamente non possiamo modificare XXX. ● Il pattern d'uso più comune consiste nell'avere un alto numero di tasklets che collaborano. ● Twisted fa più o meno la stessa cosa coi generator. Mumble mumble...
  • 19. My Name is I, IEnumerable public class Agent007 { Public Agent007(Scheduler s, Queue kills) { this.kills = kills; this.scheduler = s; s.AddTask(Investigate()); } IEnumerable Investigate() { if (LocateSpectreAgent()) { this.kills.Push(1); yield return Kill(); } yield return DrinkMartini(); }
  • 20. My Name is I, IEnumerable (2) IEnumerable Kill() { this.schedule.AddTask(new KillAnimation(this).Start()); } IEnumerable DrinkMartini() { yield return new Timespan(2); } IEnumerable MeetBeautifulWoman() { yield return new Signal(“randezvous”); B } }
  • 21. multiprocessing ● Utilizzo delle caratteristiche esistenti del sistema ● API simile a quelle già esistenti (threading) ● Rimozione dello stato condiviso ● Primitive di sincronizzazione esplicite MA Di nascosto la libreria fa tutto ciò che voi non fate!
  • 22. “square-reduce” def square_range(q, a, b): D for x in xrange(a, b): q.put(x*x) q = Queue() p1 = Process(target=square_range, args=(q,0,1000)) p2 = Process(target=square_range, args=(q,1000,2000)) … # Recuperiamo i dati qui...
  • 23. “square-reduce-faster” def square_range(q, a, b): result = [x * x for x in xrange(a, b)] q.put(result) q = Queue() p1 = Process(target=square_range, args=(q,0,1000)) p2 = Process(target=square_range, args=(q,1000,2000)) … # Recuperiamo i dati qui...
  • 24. “square-reduce-done-right” ● Incredibile quanto in passato le librerie per il multithreading si siano concentrate sulle primitive. ● Semantica che non richieda lock espliciti. Parallel.Range(1,1000000) .Select(x => x * x) .Sum();
  • 25. Duck Typing... PyQuack! PyQuack! ...is sexy!
  • 26. Quack! Quack! “When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.”
  • 27. Hiss! Hiss! Se vedo un serpente che striscia come un Pytone, che sibila come un Pyton e che si programma come un Pytone, non é detto che sia un Pytone. Ma il fatto che ci assomigli mi rende molto, molto, molto felice!
  • 28. The End Federico Di Gregorio <fog@initd.org>