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.
Il Corso Programmazione Java Base di K-Tech (http://www.k-tech.it) ha come obiettivo quello di far comprendere le tecniche di programmazione orientata agli oggetti, cioè di modellare e “pensare” a oggetti, di trasmettere i concetti base del linguaggio e le basi per sviluppare piccole applicazioni in modo autonomo.
Il corso Programmazione Java Base è composto da dodici moduli:
1. Introduzione
2. Ciclo di sviluppo
3. Sintassi Elementare
4. Principi OOP
5. Classi e Oggetti
6. Concetti Object Oriented
7. Collections
8. Eccezioni
9. Input Output
10. Serialization
11. Unit Testing
12. Threads
Leggi il programma completo: http://www.k-tech.it/formazione/catalogo/programmazione_java_base
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.
Il Corso Programmazione Java Base di K-Tech (http://www.k-tech.it) ha come obiettivo quello di far comprendere le tecniche di programmazione orientata agli oggetti, cioè di modellare e “pensare” a oggetti, di trasmettere i concetti base del linguaggio e le basi per sviluppare piccole applicazioni in modo autonomo.
Il corso Programmazione Java Base è composto da dodici moduli:
1. Introduzione
2. Ciclo di sviluppo
3. Sintassi Elementare
4. Principi OOP
5. Classi e Oggetti
6. Concetti Object Oriented
7. Collections
8. Eccezioni
9. Input Output
10. Serialization
11. Unit Testing
12. Threads
Leggi il programma completo: http://www.k-tech.it/formazione/catalogo/programmazione_java_base
Penetration Testing con Python - Network SnifferSimone Onofri
Una nota massima dice che "se ascolto dimentico, se vedo ricordo, se faccio capisco", il "fare", come lo scrivere codice e non usare strumenti già pronti è la chiave per essere un buon Penetration Tester. Non è un caso che Chris Miller dice che "la differenza stra uno script kiddies e i professionisti è la mera differenza tra chi usa strumenti di altri o i propri" Ovviamente questo presuppone una profonda conoscenza di quello che si sta facendo - una tecnica di attacco particolare, i protocolli utilizzati, dei sistemi, delle aplicazioni e così via. Quindi scrivere i propri strumenti è un modo di imparare realmente quello che accade sotto al "motore" di altri strumenti e come funzionano gli attacchi. Durante il talk vedremo in particolare i raw socket su linux e come scrivere uno sniffer.
Elementi di C# 1.0
Delegati ed eventi. Eccezioni. Enumeratori.
Elementi di C# 2.0
Static Classes. Generics e collezioni generiche.Nullable Types. Partial Types e Partial Classes. Anonymous Methods.Iteratori,
Elementi di C# 3.0
Auto-implemented properties.Object Initializers e Collection Initializers. Implicit Typed Variables. Anonymous Types.Extension Methods. Lambda Expression.
With Visual Studio 2017, we have a new C # language update. After a brief review of Update 6.0, we'll see what's new. The themes of Update 7 are: Working with Data, Improved Perfomances, and Code Simplification.
Dispense sulle Espressioni Lambda usate in Java 8 realizzate dall'Ing. Roberto Musa per il Corso di Programmazione ad Oggetti presso la SDSS del Politecnico di Torino di Scano di Montiferro.
2. Introduzione
Il Python mette a disposizione tutta una serie
di meccanismi per il metaprogramming
Introspezione di classi e metodi
Esecuzione di codice generato dinamicamente
Gestione degli errori a runtime
Tali funzionalità sono presenti sotto forma di
funzioni builtin e di moduli
Linguaggi dinamici – A.A. 2009/2010
2
3. Introspezione a livello di sistema
E' possibile invocare funzionalità di
introspezione già a livello di interprete da riga
di comando
L'interprete interattivo ci fornisce informazioni
sui moduli installati e sulle loro caratteristiche
Modulo di sistema sys
Fornisce informazioni sull'interprete e
sull'ambiente operativo
import sys
Linguaggi dinamici – A.A. 2009/2010
3
4. Introspezione a livello di sistema
Alcuni esempi di introspezione
Nome dell'eseguibile “interprete”:
sys.executable
Versione dell'eseguibile “interprete”:
sys.version
Nome della piattaforma:
sys.platform
Limiti di sistema:
sys.maxint, sys.maxsize, sys.maxunicode
Argomenti da linea di comando:
sys.argv
Percorso di ricerca dei moduli: sys.path
Linguaggi dinamici – A.A. 2009/2010
4
5. Introspezione a livello di sistema
Una delle variabili esportate da sys permette di
ottenere l'insieme dei nomi dei moduli visibili
dall'interprete
sys.modules: dizionario contenente coppie
chiave-valore, in cui:
alla chiave corrisponde il nome completo del
modulo
al valore corrisponde il percorso completo della
versione compilata del modulo
Linguaggi dinamici – A.A. 2009/2010
5
6. ESEMPI:
Person.py
Introspezione a livello di modulo
La funzione dir() elenca i simboli di un simbolo
generico
Simbolo:
Nome modulo (oggetto di tipo classe)
Nome istanza oggetto
Variabile
Funzione
Se invocata senza alcun argomento, dir()
restituisce i simboli attualmente visibili
all'interprete
Linguaggi dinamici – A.A. 2009/2010
6
7. Introspezione degli oggetti
E' possibile estrarre informazioni specifiche
dalle classi e dagli oggetti
Nome
Tipo di dato dell'oggetto
Identità
Metodi ed attributi
Relazioni con altre classi
Linguaggi dinamici – A.A. 2009/2010
7
8. ESEMPI:
type.py
Introspezione degli oggetti id.py
Nome di un simbolo associato ad un oggetto:
simbolo privato __name__
nome_simbolo.__name__
Tipo di un simbolo associato ad un oggetto:
funzione type()
type(object)
Id (identità) di un oggetto: funzione id()
id(object)
Confronto di identità: funzione is()
obj_a is obj_b
Restituisce True se i due oggetti hanno lo stesso
id
Linguaggi dinamici – A.A. 2009/2010
8
9. ESEMPI:
attr.py
Introspezione degli oggetti
Controllo esistenza di uno specifico attributo
in un oggetto: funzione hasattr()
hasattr(object, attribute)
Restituisce True se object ha l'attributo attribute
L'attributo può essere una variabile/funzione
Recupero di uno specifico attributo da un
oggetto: funzione getattr()
getattr(object, attribute)
Equivalente ad object.attribute
Attribute può essere il contenuto di una variabile
stringa; pertanto, gli attributi possono essere
specificati dinamicamente!
Linguaggi dinamici – A.A. 2009/2010
9
10. ESEMPI:
interrogate.py
Introspezione degli oggetti
Controllo invocabilità di un oggetto: funzione
callable()
callable(object)
Restituisce True se object è invocabile
Relazioni con altre classi:
metodi isinstance() e issubclass()
Linguaggi dinamici – A.A. 2009/2010
10
11. Subroutine anonime
E' possibile assegnare a variabili delle funzioni
(che vengono perciò chiamate subroutine
anonime)
In Python, la funzioni anonime sono chiamate
funzioni lambda
In onore ad Alonzo Church (1903-1995), ideatore
del lambda-calcolo e precursore dei linguaggi
funzionali
Linguaggi dinamici – A.A. 2009/2010
11
12. ESEMPI:
switch.py
Subroutine anonime
Una funzione anonima è definita tramite la
parola chiave lambda
variabile = lambda lista_var : espressione
Ad esempio, la seguente assegnazione associa
alla variabile f la funzione anonima x^2
f = lambda x: x^2
La variabile f punta all'oggetto “funzione
anonima” rappresentato dall'espressione x^2
type(f) restituisce, conseguentemente, il tipo
function
Linguaggi dinamici – A.A. 2009/2010
12
13. ESEMPI:
closure1.py
Closure closure2.py
In Python, le closure (blocchi di codice cui
sono associati una o più variabili) possono
essere implementate in due modi diversi:
definendo una funzione che restituisce una
funzione lambda
definendo una funzione che a sua volta
definisce e restituisce un'altra funzione
Linguaggi dinamici – A.A. 2009/2010
13
14. ESEMPI:
eval.py
Generazione dinamica di codice exec.py
execfile.py
Il Python mette a disposizione meccanismi per
valutare espressioni e statement
eval(expr): l'espressione viene analizzata
sintatticamente e valutata
exec(stmt): lo statement viene analizzato
sintatticamente ed interpretato
execfile(file): il file viene letto, analizzato
sintatticamente ed interpretato
E' possibile passare due ulteriori parametri:
globals (un dizionario di variabili globali), e
locals (un dizionario di variabili locali)
eval(expr, globals, locals)
Linguaggi dinamici – A.A. 2009/2010
14
15. ESEMPI:
compile.py
Generazione dinamica di codice
Se la stessa stringa deve essere eseguita più
volte, conviene precompilarla
compile(source, filename, mode)
Compila la stringa source (o, in alternativa, il file
di nome filename)
Il parametro mode specifica l'identità
dell'oggetto prodotto:
'exec' sequenza di statement
'eval' espressione
'single' un singolo statement interattivo
Viene restituito un code object che può essere
valutato con eval() o interpretato con exec()
Linguaggi dinamici – A.A. 2009/2010
15
16. ESEMPI:
exc1.py
Gestione degli errori a runtime
Il Python mette a disposizione il costrutto
try-except-else-finally per gestire le eccezioni
try:
blocco di codice
except lista_eccezioni:
blocco di codice
…
else: # eseguito in assenza di eccezioni
blocco di codice
finally: # eseguito sempre
blocco di codice
Linguaggi dinamici – A.A. 2009/2010
16
17. ESEMPI:
exc2.py
Gestione degli errori a runtime
E' possibile ignorare alcune eccezioni
associando la relativa lista di nomi allo
statement nullo pass
try:
blocco di codice
except lista_eccezioni:
pass
Linguaggi dinamici – A.A. 2009/2010
17
18. ESEMPI:
exc3.py
Gestione degli errori a runtime Myerror.py
Le eccezioni possono essere invocate dal
programmatore tramite l'istruzione raise
raise NomeEccezione(Lista_Argomenti)
L'elenco delle eccezioni è consultabile al
seguente indirizzo: http://docs.python.org/
library/exceptions.html
E' possibile definire nuove eccezioni
estendendo la classe Exception
Linguaggi dinamici – A.A. 2009/2010
18