Dopo una piccola introduzione al linguaggio Groovy, dove verranno illustrate brevemente alcune peculiarit, si passer ad esaminare le caratteristiche che lo rendono adatto per la generazione di DSL.
Verr quindi presentato come caso pratico la costruzione di una DSL e sar mostrato come 竪 possibile embeddarla in un progetto Java.
Creare un proprio linguaggio di programmazione per il web e applicazioni desk...Codemotion
油
Nonostante siano disponibili maree di linguaggi per programmare ha senso realizzare un proprio linguaggio per risolvere specifici problemi o per utilizzarlo con determinati ambienti e tecnologie?
Partendo dall'analisi della realizzazione di un vero e proprio linguaggio interpretato con sintassi in dialetto C/PHP si cercher di illustrare se le metodologie, gli scopi e il prodotto finale hanno un senso pratico e migliorativo oppure la realizzazione di tali ambienti non sia pi湛 necessari.
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017Codemotion
油
Meetup del PHP User Group Milano con presentazione delle attivit del gruppo e dell'associazione GrUSP per la diffusione delle buone pratiche nel mondo dello sviluppo web. Durante il meetup ci sar anche un intervento di Enrico Zimuel sulle novit del PHP 7.1 (e 7.2), con la presentazione del suo nuovo libro "Sviluppare in PHP 7. Realizzare applicazioni web e API professionali" edito da Tecniche Nuove.
Dodici trucchi di cui nessuno vi parla, perch息 la lobby dei framework vi nasconde la verit !1!!! Dodici (circa) semplici trucchi per migliorare la vostra vita di scrittori di CSS. Costruire forme astratte, numerare elementi del DOM e soprattutto fare il ganzo con gli amici grazie alla conoscenza di propriet CSS misconosciute. Un talk leggero e spensierato, pieno di curiosit e consigli per divertirsi ancora scrivendo CSS.
Domain Specific Languages: implementazione in Lisp e integrazione con Java mediante API JSR-223.
Presentazione tenuta il 20/01/2009 in occasione dell'incontro del JUG Genova.
This document provides an introduction to unit testing and design patterns in Java. It discusses the value of unit testing in improving code quality and safety. It defines what a design pattern is, including different types of patterns like creational, structural, and behavioral patterns. It also gives examples of some basic patterns like Singleton and Iterator. The document is intended to provide an overview of these important concepts in software design.
Il corso consente ai partecipanti di apprendere la sintassi del linguaggio di programmazione Java, la programmazione orientata agli oggetti con Java, la creazione di interfacce grafiche utente (GUI), la gestione delle eccezioni, le funzionalit di I/O per i file, i thread e le funzioni di rete. I programmatori che gi hanno familiarit con i concetti della programmazione object-oriented potranno imparare a sviluppare applicazioni Java. I contenuti fanno riferimento alla piattaforma Java Platform, Standard Edition 6 (Java SE 6) e al prodotto Java SE Development Kit 6 (JDK 6). Le esercitazioni pratiche prevedono l'uso dell'IDE (Integrated Development Environment) NetBeans 5.5.
This document discusses building Java applications. It explains that all Java programs are built from classes, which contain fields to store data and methods to operate on that data. Every application needs a main class with a main method, which acts as the entry point for the program. The main method executes first when the program starts. The document provides an example of a simple Java application class with a main method that prints a string to the console. It describes how instances of a class are used to acquire and work with data, while the class describes the data and behavior.
The course aims to provide you with an understanding of the fundamental concepts involved in object-oriented programming (object, class, protocol, hierarchy, inheritance, encapsulation, polymorphism and collaboration).
The programming language you will use is Java. However, the purpose of the course is not to teach you the minutiae of the Java language, but rather to teach you fundamental object-oriented programming concepts and skills that will be transferable to any object測 oriented language
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
Programmazione a oggetti tramite la macchina del caff辿 (1/3)Marcello Missiroli
油
Una introduzione semplice e (spero) intuitiva al mondo della programmazione a oggetti usando come riferimento una macchina del caff辿 (tipo Nespresso) (1/3)
Versione 2: tolto qualche refuso, aggiunto un paio di slide chairificatori.
This document provides an introduction to unit testing and design patterns in Java. It discusses the value of unit testing in improving code quality and safety. It defines what a design pattern is, including different types of patterns like creational, structural, and behavioral patterns. It also gives examples of some basic patterns like Singleton and Iterator. The document is intended to provide an overview of these important concepts in software design.
Il corso consente ai partecipanti di apprendere la sintassi del linguaggio di programmazione Java, la programmazione orientata agli oggetti con Java, la creazione di interfacce grafiche utente (GUI), la gestione delle eccezioni, le funzionalit di I/O per i file, i thread e le funzioni di rete. I programmatori che gi hanno familiarit con i concetti della programmazione object-oriented potranno imparare a sviluppare applicazioni Java. I contenuti fanno riferimento alla piattaforma Java Platform, Standard Edition 6 (Java SE 6) e al prodotto Java SE Development Kit 6 (JDK 6). Le esercitazioni pratiche prevedono l'uso dell'IDE (Integrated Development Environment) NetBeans 5.5.
This document discusses building Java applications. It explains that all Java programs are built from classes, which contain fields to store data and methods to operate on that data. Every application needs a main class with a main method, which acts as the entry point for the program. The main method executes first when the program starts. The document provides an example of a simple Java application class with a main method that prints a string to the console. It describes how instances of a class are used to acquire and work with data, while the class describes the data and behavior.
The course aims to provide you with an understanding of the fundamental concepts involved in object-oriented programming (object, class, protocol, hierarchy, inheritance, encapsulation, polymorphism and collaboration).
The programming language you will use is Java. However, the purpose of the course is not to teach you the minutiae of the Java language, but rather to teach you fundamental object-oriented programming concepts and skills that will be transferable to any object測 oriented language
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
Programmazione a oggetti tramite la macchina del caff辿 (1/3)Marcello Missiroli
油
Una introduzione semplice e (spero) intuitiva al mondo della programmazione a oggetti usando come riferimento una macchina del caff辿 (tipo Nespresso) (1/3)
Versione 2: tolto qualche refuso, aggiunto un paio di slide chairificatori.
HTML5 Italy: Mai pi湛 CSS, fogli di stile moderni con LESS - Salvatore Romeomarcocasario
油
Talk di Salvatore Rome per il meeting di HTML5 Italy.
Se vi capita di avere fogli di stile disorganizzati, di usare il copia-incolla per ridefinire delle regole CSS, di dover cambiare un colore o un valore con Trova&Sostituisci... LESS 竪 la soluzione.
Scopriremo l'uso delle variabili per definire i colori e le dimensioni principali, i mixin per creare regole complesse e riutilizzarle (come effetti ombra o animazioni), le nested rules per ordinare il codice e le funzioni per i colori.
Inoltre vedremo come sottolineare gli errori di sintassi e come automatizzare la compilazione in file CSS.
Dopo questo tutorial non vorrete pi湛 tornare ai CSS!
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
Uso di MapCSS per estendere il validatore di JOSM. Presentazione di Francesco Ansanelli fatta durante l'incontro del gruppo OSMers BI-VC-CVL il 27 febbraio 2021.
Intro a Linux tenuta all'universit degli studi di Napoli Federico II. Speaker: Gabriele Previtera - https://www.linkedin.com/in/gabriele-previtera-6657648b/
Javascript avanzato: sfruttare al massimo il webRoberto Messora
油
Javascript 竪 uno dei linguaggi pi湛 sottovalutati e pi湛 incompresi dell'intero panorama dei linguaggi di programmazione, eppure 竪 anche uno dei pi湛 utilizzati.
Da una parte le molteplici e differenti declinazioni degli strumenti di navigazione web, dall'altra l'infelice scelta storica di usare il termine "script", hanno contribuito alla creazione del mito di un linguaggio poco rigoroso, al servizio di ogni sorta di trucco o pezza di codice.
La verit invece racconta di un linguaggio dinamico ad oggetti a tutti gli effetti, con caratteristiche molto interessanti, seppur con qualche difetto, ma soprattutto un linguaggio che, sull'onda di HTML5, rivestir se possibile ancora pi湛 importanza nell'immediato futuro.
In questa sessione verranno presentati aspetti poco conosciuti, ma molto importanti, di Javascript (scoping, hoisting, closures, ecc.), verranno presentati alcuni design patterns che permettono di strutturare in maniera intelligente le nostre librerie applicative in funzione della manutenibilit e delle performance, senza tralasciare, ove possibile, uno sguardo ad alcuni framework come jQuery o KnockoutJS.
TypeScript ha cambiato il modo di scrivere JavaScript ed in questo talk andiamo a scoprirne le principali caratteristiche per scrivere "JavaScript che non si rompe!"
N.B. Le slides sono aggiornate sino a TS 3.
This document describes how to build a RESTful cloud service using OpenShift and related technologies like Tomcat, Jersey, JSON, and AngularJS. It discusses OpenShift as a hosting platform, the Richardson Maturity Model for REST APIs, best practices for REST including use of HTTP verbs, resources and hypermedia. Code examples demonstrate implementation including configuration of Tomcat in OpenShift, versioning via Git, and backports from another framework to support resources and hypermedia.
JPA2 is an object-relational mapping framework that provides persistence for objects. It allows objects to be stored in and retrieved from a database without writing SQL code. Annotations or XML can be used to map objects and their properties to database tables and columns. Common tasks like inserting, updating, deleting and querying data can be done by interacting with the persistent objects rather than writing SQL statements directly. The document provides examples of mapping a library domain model including books, persons, and loans to a database using JPA2.
2. INDICE
cos竪 Groovy?
caratteristiche interessanti (a mio giudizio), in ordine
arbitrariamente sparso
cos竪 un DSL?
caratteristiche che rendono Groovy adatto a costruire un DSL
un esempio semplice (lo facciamo al volo)
un esempio meno semplice (non lo facciamo al volo)
nota: in parallelo vedremo esempi
3. COS GROOVY (PARTE 1)?
linguaggio per la JVM alternativo a Java
ispirato a: Ruby, Python, Smalltalk
consente compilazione dinamica, ma pu嘆 anche
generare bytecode
tipizzazione forte dinamica
closure
6. COMMAND-LINE GROOVY
SWITCH -L
$ groovy -l 1234 -e if(line==DATE){println new Date()}
Groovy is listening on port 1234
$ telnet localhost 1234
Connect to localhost.
Escape character is ^].
DATE
Mon Mar 17 21:38:49 CET 2014!
$ groovy -l 80 SimpleWebServer.groovy
Esempio nei sorgenti Groovy: serve i file di una cartella
come webserver
7. COS GROOVY (PARTE 2)?
竪 possibile usare direttamente lAPI Java
accetta (salvo alcune eccezioni) anche sintassi Java (es. {1,2,3,4} non 竪
array, ma [1,2,3,4] 竪 un ArrayList)
import automatico (di convenienza) di alcune classi Java (es. java.io,
java.lang, java.net, java.util)
println -> System.out.println
parentesi opzionali nella chiamata a metodi
notazione breve per getter e setter (o.鍖eld -> o.getField())
; opzionale (salvo alcune eccezioni)
return opzionale (viene restituita lultima valutazione)
this usata in contesti statici punta alla classe
8. COS GROOVY (PARTE 3)?
GString interpolation: Hello ${name}
Lazily interpolation (eval in conversione a String): Nr. ${-> i}
== -> equals, equals -> is: non pi湛 a != null && a.equals() !!
in: 竪 un operatore basato su contains(): 3 in [1,2,3,4]
sintassi nativa per alcune strutture dati: [1,2,3] list, [TN:Trento,
BZ:Bolzano] map, 1..10 range
contesti booleani: if( myString!=null && myString.length>0 ){} ->
if(myString){}
safe-dereferencing: email?.destinatario?.indirizzo
costrutto and-or (Elvis operator):
def result = name != null ? name : Unknow
9. FOR E FOR EACH
for (int i=0; i<n; i++) { }!
for (i in 0..n-1) { }!
for (i in 0..<n) { }!
n.times { }
(1..5).each { println nr. $it }!
1..5 instanceof List!
{ println nr. $it }(3)
nr. 3
10. GROOVY BEANS
class Book {
String title
String description
}
def b1 = new Book()
b1.setTitle(Anna Karenina)
b1.description = A very long book!
println b2.getDescription()
println b2.title
def b2 = new Book(title:Anna Karenina)
println b2.title
11. ALTRO SUI GROOVY BEANS
Annotation based AST transformation (groovy.transform.*):!
@Immutable (read only bean)!
@ToString(includeNames=true, excludes=description,year)!
@EqualsAndHashCode!
@Canonical (@ToString + @EqualsAndHashCode)!
@TupleConstructor -> new Book(Anna Karenina, Very long
book)!
@AutoClone(style=AutoCloneStyle.COPY_CONSTRUCTOR)
def book1 = new Book(title:Anna Karenina)
def book2 = book1.clone()
assert book1.title == book2.title!
AutoCloneStyle.SERIALIZABLE se implementa Serializable
12. ALTRE COSE BELLE
methodMissing e propertyMissing per gestire
accessi a propriet o metodi mancanti
supporto nativo per markup XML, Json (Slurper e
Builder)
conversioni bean in xml e json
ExpandoMetaClass
built-in memoize
13. DSL
DOMAIN SPECIFIC LANGUAGE
Linguaggio di programmazione dedicato ad uno
speci鍖co dominio (contrapposto a general-purpose)
statistica (R e S)
programmazione matriciale (Mata)
Logo
SQL
14. DEFINIRE UN DSL IN GROOVY
Combinazione di tre punti chiave:
鍖uent API
embedded shell
speci鍖cit del linguaggio
15. FLUENT API
un implementazione di un API method chaining,
ovvero che permette chiamate di metodi a catena.
Es. JavaFX
Scene scene = SceneBuilder.create().width(516).height(387)
! .root(
! ! GroupBuilder.create().children(
! ! ! ImageViewBuilder.create().image(new Image(..)),
! ! ! [omissam]
! ! ).build()).build();
16. EMBEDING GROOVY IN JAVA
// Semplice esecuzione di codice Groovy!
GroovyShell shell = new GroovyShell();
String groovyCode = println Hello + Groovy;
String out = shell.evaluate(groovyCode);
// Esecuzione codice Groovy con variabile embeddata!
Book myBook = new Book();
myBook.setTitle(Anna Karenina);!
Binding binding = new Binding();
binding.setVariable(book, myBook);
String groovyCode = println Reading + book.title;
GroovyShell shell = new GroovyShell(binding);
String out = shell.evaluate(groovyCode);
17. SPECIFICIT DI GROOVY
le chiamate di metodi possono omettere le parentesi
scriptBaseClass: la classe script base che rappresenta il contesto
di esecuzione dello script
ImportCustomizer: importazione diretta nello script di classi e
package (anche *)
SecureASTCustomizer: gestione della sicurezza (es. liste
bianche/nere)
ASTTransformationCustomizer: per aggiungere
automaticamente annotazioni di trasformazione ai metodi
18. ESEMPIO SEMPLICE
Voglio creare un DSL in grado di eseguire:
compute 4 plus 3 plus 2 minus 1 print total!
Una classe che implementa i metodi di linguaggio (compute, plus, minus, etc) come API
鍖uent
Una classe astratta come base dello script groovy (si occuper di proxare i metodi sullo
script)
Un enum per le costanti (es. total)
GroovyShell con:
binding della classe linguaggio
classe base astratta (vedi sopra)
importazione custom delle costanti (vedi sopra)
Vediamo in pratica come procedere! (sorry, no slides here)
19. LA CLASSE DI LINGUAGGIO
class Language {
Integer tot;
def compute(Integer a){
tot=a
this
}
def plus(Integer a){
tot += a
this
}
def minus(Integer a){
tot -= a
this
}
def print(Consts c){
tot
}
}
20. LA SCRIPTBASE E LA COSTANTE
abstract class AbstractScriptBaseClass extends Script{
def compute(Integer a){
this.lang.compute(a)
}
def plus(Integer a){
this.lang.plus(a)
}
def minus(Integer a){
this.lang.minus(a)
}
def print(String t){
this.lang.print(t)
}
}
public enum Consts {
total
}
21. TESTIAMO LAPI
void testAPI() {
Language lang = new Language()
String total = "total"
// test API con sintassi tradizionale
Integer tot1 = lang.compute(4).plus(3).plus(2).minus(1).print(total)
// test API omettendo le parentesi
Integer tot2 = lang.compute 4 plus 3 plus 2 minus 1 print total
assert tot1 == 8
assert tot2 == 8
}
22. TESTIAMO IL DSL
void testShell() {
// il codice scritto nel DSL
def code = "compute 4 plus 3 plus 2 minus 1 print total"
Language lang = new Language()
Binding binding = new Binding();
binding.setVariable("lang", lang)
CompilerConfiguration conf = new CompilerConfiguration()
conf.scriptBaseClass = AbstractScriptBaseClass.class.name
ImportCustomizer imports = new ImportCustomizer()
imports.addStaticStars(Consts.name)
conf.addCompilationCustomizers(imports)
GroovyShell shell = new GroovyShell(binding, conf)
Integer tot = (Integer) shell.evaluate(code)
assert tot == 8
}
23. ESEMPIO MENO SEMPLICE
Un DSL per de鍖nire e risolvere problemi di geometria piana euclidea
(https://github.com/tizianolattisi/peg)
create triangle name "ABC"
extend "AC" to "D" with measure:"BC"
extend "BC" to "E" with measure:"AC"
create segment name "ED"
extend "DE" to "H"
extend "AB" to "H"
apply "10.8" on "ad", "bc" //angoli opposti
apply "10.3" on "CED", "ABC"
apply "10.6" on "ABC", "cba", "CED", "edc"
create segment name "BD"
apply "10.10" on "BCD", "BC", "CD"