A simple introduction to the Python programming language. In Italian. OLD: superseeded by Pycrashcourse 3.1.
Originally presented during the Networking class of the Computer Science course at the University of Parma
Con PHP Object Injection ci si riferisce ad una classe di vulnerabilità che può affliggere quelle applicazioni PHP che utilizzano la funzione "unserialize" in modo insicuro. Attraverso questo genere di vulnerabilità un potenziale attaccante potrebbe essere in grado di "iniettare" uno o più oggetti all'interno dello scope dell'applicazione. Gli attributi di tali oggetti possono essere modificati arbitrariamente dall'attaccante, e ciò potrebbe causare un comportamento inaspettato del flusso di esecuzione dell'applicazione, che potrebbe consentire all'attaccante di eseguire diverse tipologie di attacchi, o nei casi più gravi di eseguire codice PHP arbitrario.
A simple introduction to the Python programming language. In Italian. OLD: superseeded by Pycrashcourse 3.1.
Originally presented during the Networking class of the Computer Science course at the University of Parma
Con PHP Object Injection ci si riferisce ad una classe di vulnerabilità che può affliggere quelle applicazioni PHP che utilizzano la funzione "unserialize" in modo insicuro. Attraverso questo genere di vulnerabilità un potenziale attaccante potrebbe essere in grado di "iniettare" uno o più oggetti all'interno dello scope dell'applicazione. Gli attributi di tali oggetti possono essere modificati arbitrariamente dall'attaccante, e ciò potrebbe causare un comportamento inaspettato del flusso di esecuzione dell'applicazione, che potrebbe consentire all'attaccante di eseguire diverse tipologie di attacchi, o nei casi più gravi di eseguire codice PHP arbitrario.
"Non Aprite Quella Unit!" ovvero "Scrivere Clean Code in DelphiMarco Breveglieri
Slide della sessione "Non Aprite Quella Unit" per ITDevCon 2017. Si parla degli errori comuni nella scrittura del codice e delle tecniche per creare codice pulito (Clean Code) in linguaggio Delphi.
co-authors: Scola Davide and Maia Nicoletta
Small workshop on Inferno, Limbo and the Dis virtual machine.
Inferno is a new operative system developped for creation and support of network systems and distribuited services.
There are three fundamental programming principles: all resources are files in a hierarchic file system, the network is a unic namespace like a file system hierarchic, it uses Styx that is a standard protocol of comunication for local and remote resources.
Limbo is the programming language for the Inferno OS.
The language is Object Based, you can compile it or interpret it with the Dis virtual machine (like Java virtual machine with a JIT compiler).
Limbo has a native support for: array, string, int, float, tuple (like record), channel (linda-like), and other...
The Limbo's channels are used to comunicate with other processes or with thread.
The Dis virtual machine is an environment for Limbo programs and it has important features: CISC architecture, memory-to-memory, many high level types, just in time compiler, ecc...
In the end of presentation there is a comparison between Dis, Java VM and C# .Net VM.
Docker è ottimo per applicazioni singole, ma è sicuramente meglio per applicazioni multi-container! In questo talk vedremo come possiamo usare Docker Compose per riprodurre fedelmente sulla nostra macchina locale i nostri stack di produzione. Analizzeremo anche il caso di una applicazione sviluppata da noi e testabile in diversi ambienti grazie alla componibilità degli stack di Docker Compose.
1. INTRODUZIONE A PYTHON
Lezione 1
Paolo Ferretti per Deltapromo
URL corso: http://corso-deltapromo.paoloferretti.net/
http://www.paoloferretti.net
paolo@paoloferretti.net
2. PYTHON
• Python is a programming language that lets you work more
quickly and integrate your systems more effectively. You can
learn to use Python and see almost immediate gains in
productivity and lower maintenance costs.
3. PERCHÈ PYTHON
• Multi-piattaforma • Velocità di sviluppo
• Veloce • Produttività
• 3xpiù veloce rispetto a • Mantenimento del codice
PHP o Ruby
• 2x più lento rispetto a Java
• Leggibilità del codice
4. CHI USA PYTHON
• NASA • Google
• Rackspace (Hosting) • Thawte (certificati digitali)
• Industrial
Light and Design • Firaxis Games (Civilization)
(Star Wars)
• Activision (Call of Duty)
• Honeywell
• http://www.python.org/
• Youtube about/quotes/
5. QUALE VERSIONE?
• Ramo 2.x • Ramo 3.x
• il più utilizzato • il meno utilizzato
• massima compatibilità con • scarsa compatibilità con
le librerie esistenti librerie esistenti
• installatodi default su • non sempre installato di
molte distribuzioni Linux, default
Solarie e Mac OS X
6. QUALE VERSIONE?
• Attualmente è meglio sviluppare sul ramo 2.x
• Django, SQLAlchemy, Google App Engine e tutte le
principali librerie hanno la piena compatiblità
•è un ramo stabile e molte caratteristiche del ramo 3.x
hanno subito un backport sul ramo 2.x
7. COME SI INSTALLA
• Su Windows
• installer scaricabile da python.org
• sconsigliato
• Su Linux
• normalmente è preinstallato
• da pacchetti precompilati o da sorgenti
9. DOCUMENTAZIONE
• Dal sito ufficiale Python
• Libro gratuito “Dive into Python”
( http://it.diveintopython.org/ )
10. SHELL
• L’interprete
python, se lanciato da console senza argomenti,
apre una shell
11. SHELL
• Il prompt >>> indica che possiamo inziare a lavorare
• La shell è utile
• per provare piccoli snippets di codice
• per leggere la documentazione
• nome_funzione?
12. IPYTHON
• Lo strumento che ogni sviluppatore Python deve avere
• Vantaggi
• colorazione del codice
• autocompletamento
• Facilmente installabile
14. VARIABILI
• Linguaggio dinamico
•itipi delle variabili vengono definiti a runtime e possono
variare
• una variabile si definisce con
• nome_variabile = valore
15. CONVENZIONI PER LA
NOMENCLATURA
• Nonostante la tipizzazione dinamica, anche Python ha delle
convenzioni per la nomenclatura (maggiori dettagli nella PEP8)
• COSTANTI_IN_MAIUSCOLO
• snake_case_in_underscore_per_variabili_normali, istanze di
oggetti, nomi di funzioni e moduli
• CamelCase con prima lettera maiuscola per i nomi delle
classi
16. PYTHON ENHANCEMENT
PROPOSALS
• Il loro acronimo è PEP
• Definiscono regole e convenzioni
• Si trovano all’indirizzo http://www.python.org/dev/peps/
• Alcune tra le più famose sono le 1, 8, 20, 257, 3000
17. ESPRESSIONI ARITMETICHE
• Sono molto simili a quelle che si scrivono a mano su carta
• base = 50
height = 20
triangle_area = (width * height) / 2
20. LISTE
• In Python non parliamo di array ma di liste
• Le liste sono dinamiche
• Si instanziano con
•l = list()
•l =[]
21. LISTE
• Si scorrono facilmente
• Possono essere concatenate con l’operatore +
• Possono contenere elementi di tipi diversi
•l = [1, "Paolo", 3.14, [1, 2]]
• Con i metodi insert e append è possibile inserire elementi ad
un certo indice oppure appenderli alla fine della lista
22. LISTE
• Agli elementi si può accedere
• direttamente con l’indice: l[2] = 3.14
• con gli slice
• l[1:] = ['Paolo', 3.14, [1, 2]]
• l[2:4] = [3.14, [1, 2]]
• l[:2] = [1, 'Paolo']
23. TUPLE
• Una tupla è una lista che non si può modificare
• Si instanzia con
•t = tuple()
•t = ()
• Ha le stesse caratteristiche di una lista
24. INSIEMI
• Usati per contenere una sequenza non ordinata di oggetti
• Si instanziano con
•s = set()
• Non esistono indici
• Gli
elementi possono essere aggiunti con il metodo add() e
rimesso col metodo delete()
25. INSIEMI
• Gli elementi non sono mai duplicati
• Supportano unione (|), intersezione (&), differenza (-) e
differenza simmetrica (^)
• Gli
elementi possono essere aggiunti con il metodo add() e
rimesso col metodo delete()
26. DIZIONARI
•I dizionari sono array associativi che contengono oggetti
indicizzati da chiavi
• Si instanziano con
•d = dict()
•d = {}
27. DIZIONARI
• Accesso agli elementi
• d[“nome”]
• d.get(“nome”)
• verifica esistenza di una chiave
• if “nome” in d
28. ITERAZIONI
• Ciclo for
• for item in list:
print item
• Nel ciclo for non si gestiscono direttamente gli indici
• Ilciclo for itera su qualsiasi cosa implementata come un
iteratore
29. ITERAZIONI
• Ciclo while
• while espressione_booleana:
fai qualcosa
• Poco usato, normalmente si usa il for
30. FILE INPUT
• Molto semplice e immediato
•f = open(“nome_file”, “r”)
for line in f:
print line
f.close()
• Nuovo metodo
• withopen(“nome_file”, “r”) as f:
for line in f:
...
31. FILE OUTPUT
• L’apertura del file avviene come per l’input ma con “w” al
posto di “r”
• si usa il metodo write() per scrivere su file
32. STRINGHE
• Possono essere chiuse tra apici singoli (‘), doppie virgolette (“)
e triple virgolette (“””) o tripli apici (‘’’)
• Tra apici singoli e virgolette non c’è differenza
• Le
triple virgolette e i tripli apici servono per le stringhe
multiriga e per la documentazione
• Lestringhe sono liste di caratteri, quindi possiamo agire su di
esse come se fossero liste
• Quindi valgono concatenazioni, slice, ecc...
33. FUNZIONI
• Si creano con
• def nome_funzione(a, b):
pass
• Opzionalmente una funzione può ritornare uno o più valori
con l’istruzione return
34. FUNZIONI
• Una funzione può avere dei valori predefiniti per i parametri
• def function(a = 10, b = 20)
• Possiamo anche decidere l’ordine in cui chiamare i parametri
• function(b=2, a=4)
35. GENERATORI
• Sono come le funzioni, ma invece di restituire un singolo
valore, restituiscono una sequenza di valori
• Usano yield al posto di return
• def countdown(n):
while n > 0:
yield n
n -= 1
36. GENERATORI
• Li possiamo chiamare come normali funzioni, per poi accedere
all’elemento successivo col metodo next()
• Possiamo lavorarci sopra con un ciclo for
37. OGGETTI
• Tutti i valori usati in un programma Python sono oggetti
• liste
• stringhe
• ecc...
• Possiamo creare dei tipi di oggetti personalizzati
38. CLASSI
• Sono tipi personalizzati
• Si definiscono con
• class NomeClasse(object):
def __init__(self):
“””io sono il costuttore”””
pass
def metodo(self, a, b):
return a * b
39. CLASSI
• Le proprietà possono essere definite con
• @property
def proprieta(self):
return self.__nome
@proprieta.setter
def proprieta(self, value):
self.__name = value
40. CLASSI
• L’oggetto di una classe viene instanziato con
•a = NomeClasse()
•E i metodi e le proprietà vengono usati con
• a.metodo()
• a.proprieta = “Python”
41. CLASSI
• Normalmente ogni elemento della classe è pubblico
• Ci sono due livelli di elementi privati
•_ : privato per uso interno alla classe
• __ : privato, sconsigliato usarlo all’esterno
42. ECCEZIONI
• Sono il modo migliore per controllare il flusso degli errori
• Possono essere catturate con
• try:
f = open(“filename.txt”, “r”)
except IOError as e:
print e
43. ECCEZIONI
• Le eccezioni possono anche essere sollevate con
• raise IOException(“Eccezione di IO”)
• Possiamoanche creare le nostre eccezioni, è sufficiente fare
una sottoclasse di Exception
• class Mia Eccezione(Exception):
pass
44. MODULI
• Si richiamano con
• import nome_modulo
• from nome_modulo import nome_funzione
•I moduli sono funzioni, variabili e classi raccolti in un file
45. PACKAGES
•I packages sono collezioni di moduli
• Si richiamano esattamente come i moduli
• import package.modulo
• from package import modulo
• from package.modulo import funzione
• Un package è una cartella contenente file .py e un file
__init__.py