Your SlideShare is downloading. ×
0
SPyppolare o non sPyppolare?

                   a script by
           Federico Di Gregorio

  Pycon Italia Qu4ttro – Fir...
A                                                   A
SPyppolare o non sPyppolare?

                    a script by
      ...
A                                       H
Nella bella Firenze,
dove noi collochiam la nostra scena,
molti linguaggi di par...
Molti Linguaggi
●
    Perché la azienda (per la quale, ovviamente,
    lavoriamo) ce lo impone.
●
    Perché non tutti i p...
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_...
PyVantaggi
Andiamo ad elencare i vantaggi del Python...
●
    Compatto e leggibile
●
    Mix imperativo e funzionale
●
   ...
PyEsempi
Tre esempi che a me piacciono molto:
●
    nevow stan, per la generazione di HTML
●
    Stackless Python
●
    mu...
Dominare il DOM
head = document.createElement(“head”)
title = document.createElement(“title”)
title.innerHTML = “Questo NO...
PyStile
from nevow import flat, tags as T
html = T.html[
  T.head[“Questo è Stile!”],
  T.body[T.p(class=”red”)[
     “E q...
PyStile#
using Tesseract.Html;
var T = new HtmlTemplate(); var html =
  T.head()[“Questo è Stile#!”],
  T.body()[T.p(“clas...
Stackless
●
    Modifiche all'interprete per supportare “tasklets”.
●
    Ovviamente non possiamo modificare XXX.
●
    Il...
My Name is I, IEnumerable
public class Agent007 {
  Public Agent007(Scheduler s, Queue kills) {
      this.kills = kills; ...
My Name is I, IEnumerable (2)
    IEnumerable Kill() {
        this.schedule.AddTask(new KillAnimation(this).Start());
   ...
multiprocessing
●
    Utilizzo delle caratteristiche esistenti del sistema
●
    API simile a quelle già esistenti (thread...
“square-reduce”
def square_range(q, a, b):


                                  D
    for x in xrange(a, b):
      q.put(x*...
“square-reduce-faster”
def square_range(q, a, b):
    result = [x * x for x in xrange(a, b)]
    q.put(result)


q = Queue...
“square-reduce-done-right”
●
    Incredibile quanto in passato le librerie per il
    multithreading si siano concentrate ...
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...
Hiss! Hiss!


Se vedo un serpente che striscia come un Pytone, che
 sibila come un Pyton e che si programma come un
      ...
The End

Federico Di Gregorio
   <fog@initd.org>
Upcoming SlideShare
Loading in...5
×

Spyppolare o non spyppolare

591

Published on

Federico di Gregorio

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
591
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Spyppolare o non spyppolare"

  1. 1. SPyppolare o non sPyppolare? a script by Federico Di Gregorio Pycon Italia Qu4ttro – Firenze 8,9 maggio 2010
  2. 2. A A SPyppolare o non sPyppolare? a script by Federico Di Gregorio Pycon Italia Qu4ttro - Firenze 8,9 maggio 2010
  3. 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. 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...”
  5. 5. Relax Programming
  6. 6. Dramatis Personae - Basso Livello C
  7. 7. Dramatis Personae – Java XP
  8. 8. Dramatis Personae – ???
  9. 9. Dramatis Personae – Sigh!
  10. 10. Programmare “Enterprise”
  11. 11. Programmare “Enter-Pool”
  12. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 25. Duck Typing... PyQuack! PyQuack! ...is sexy!
  26. 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. 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. 28. The End Federico Di Gregorio <fog@initd.org>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×