Apache Maven - Gestione di progetti Java e build automationTiziano Serritella
Apache Maven è un tool per la gestione di progetti e build automation, utilizzato principalmente per progetti Java, il cui obiettivo è: semplificare, uniformare e automatizzare il processo di build di sistemi complessi.
In questa presentazione / guida verranno illustrati i problemi e le criticità dei tool di build automation tradizionali: make e Apache Ant, vedremo poi come installare e configurare Maven, le caratteristiche, gli obiettivi e i punti di forza del tool, le fasi del ciclo di vita, i plugin e i goal, le dipendenze, gli scope e la risoluzione di eventuali conflitti, i repository, i plugin "esterni" e i progetti multi-modulo.
La presentazione è ricca di esempi pratici.
Presentazione sullo stato dell'arte nell'utilizzo e nello sviluppo di Java su Mac OS X effettuata al JUG Milano Meeting #14 del 12 gennaio 2006 presso Mac@Work.
Apache Maven è un software per la gestione di progetti. Basato sul concetto di project object model (POM), un punto centralizzato di informazione, Maven può gestire la build, i report la documentazione, e molto altro.
Questo seminario web, originariamente ideato da Matthew Weier O'Phinney, Team Leader del progetto Zend Framework, fornisce una panoramica di questi pattern, li identifica e tratta le interfacce coinvolte e i casi d'uso concreti. Enrico Zimuel, Senior PHP Architect italiano, che recentemente si è unito al team di sviluppo dello Zend Framework, mostrerà come sia possibile creare le proprie implementazioni e come effettuarne lo slip-stream nelle applicazioni. Fra i pattern discussi: eventi, broker e dispatcher.
Velocizzare Joomla! con Zend Server Community EditionEnrico Zimuel
Come velocizzare l'esecuzione di Joomla! utilizzando Zend Server Community Edition.
Intervento presentato il 9 Ottobre 2010 al JoomlaDay 2010 a Verona (Italia).
Lo Spring Framework viene ancora una volta incontro agli sviluppatori Java semplificandone la vita, questa volta vedremo come implementare facilmente uno strato servizi stateless da rendere disponibile remotamente nei diversi formati fruibili dalle diverse tecnologie client RIA, introducendo i concetti di Exporter e Proxy di Spring Remoting. Tutto questo tramite pura configurazione, via XML o annotation a seconda dei gusti, e con un esempio specifico in Flex con Spring BlazeDS Integration.
Un talk che affronta gli aspetti principali di una Progressive Web App, dal Manifest ai Service Worker, passando da tutte le Web API utili per le app mobile del prossimo futuro.
Visual Studio Code è il editor di codice sorgente che rende subito produttivi grazie alla sua semplicità e leggerezza ed in questo talk troverete una panoramica, oltre a tip & tricks utili.
Tech Webinar: Come ottimizzare il workflow nello sviluppo di Web AppCodemotion
Luciano Murruni illustra gli strumenti e i tool a disposizione per velocizzare e migliorare la scrittura e la qualità del codice della nostra applicazione.
Iscriviti qui per partecipare ad altri Tech Webinar gratuiti: http://goo.gl/iW81VD
Scrivici a: [email protected]
Tw: http://twitter.com/CodemotionTR
SPRING - MAVEN - REST API (ITA - Luglio 2017)Valerio Radice
Introduzione al framework Java Spring e Maven per realizzare API REST.
Breve introduzione all'uso di Maven per configurare un progetto SpringBoot e realizzare un server REST.
Disponibile il codice dimostrativo su github (link nelle slide, attenzione alle branch).
Valerio Radice (valix85)
Luglio 2017
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostriFrancesco Sciuti
Un talk dedicato agli aspetti più arcani di Angular tra i quali sono presenti alcuni mostri, che una volta conosciuti non fanno poi così tanta paura. Approfondiamo quindi alcuni aspetti della Change Detection di Angular, proviamo a capire a cosa serve e come funziona Zone.js e se sono presenti in giro altre creature o miti da sfatare!
Introduzione a Docker e alla Dockerizzazione.
Filosofia e progettazione Docker
Comandi principali per gesitere immagini, container, volumi e reti
Dockerfile e docker-compose
Valerio Radice @ Nextre (Maggio 2017)
TAG: docker , Dockerfile , docker-compose , italian , nextre
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Codemotion
Codemotion Rome 2015 - Costruiamo con Spring Boot una applicazione Java EE con transazioni multiple JDBC-JMS utilizzando H2 e HornetQ (embedded in memory), il supporto di autoconfiguration JAX-RS (Jersey), le annotazioni JSR 250 per i lifecycle hooks, e le annotazioni JSR 330 utilizzabili per AS proprietari e per la portabilità in container di dependency injection come Spring. Per finire distribuiremo su Undertow embedded HTTTP server, su un AS standalone (Apache TomEE) e come PAAS su Cloud Foundry.
Con queste “14 misere” slide ho cercato d’introdurre Liferay e come iniziare con il piede giusto per affrontare lo sviluppo di applicazioni ai voi che siete proprio “novelli”. Spero di essere riuscito con questo primo episodio a suscitare la vostra curiosità e interesse.
Una panoramica delle caratteristiche e delle possibilità che hanno reso Angular uno dei framework più importanti sulla scena frontend.
N.B. Le slides sono aggiornate sino ad Angular 6.
Questo progetto mostra le linee guida per sviluppare un prototipo
creato con Postman, Python Django, HTML, e JavaScript.
Postman & Python, uno sviluppo armonioso.
Postman & Python, a harmonious development for the Web.
Jcn12 ship it day experiences at ambientia 2012 10-24 (hs)Ambientia
ShipIt Days are 24-hour periods where Ambientia employees can work independently or in teams to produce deliverables that may benefit the company. They aim to provide autonomy over tasks, time, techniques, and teams to motivate employees. Past ShipIt projects included improvements to Liferay and Confluence, proof of concepts, process enhancements, and reusable Liferay templates. The format allows for experimentation, innovation, and integrating teams across Finland.
Velocizzare Joomla! con Zend Server Community EditionEnrico Zimuel
Come velocizzare l'esecuzione di Joomla! utilizzando Zend Server Community Edition.
Intervento presentato il 9 Ottobre 2010 al JoomlaDay 2010 a Verona (Italia).
Lo Spring Framework viene ancora una volta incontro agli sviluppatori Java semplificandone la vita, questa volta vedremo come implementare facilmente uno strato servizi stateless da rendere disponibile remotamente nei diversi formati fruibili dalle diverse tecnologie client RIA, introducendo i concetti di Exporter e Proxy di Spring Remoting. Tutto questo tramite pura configurazione, via XML o annotation a seconda dei gusti, e con un esempio specifico in Flex con Spring BlazeDS Integration.
Un talk che affronta gli aspetti principali di una Progressive Web App, dal Manifest ai Service Worker, passando da tutte le Web API utili per le app mobile del prossimo futuro.
Visual Studio Code è il editor di codice sorgente che rende subito produttivi grazie alla sua semplicità e leggerezza ed in questo talk troverete una panoramica, oltre a tip & tricks utili.
Tech Webinar: Come ottimizzare il workflow nello sviluppo di Web AppCodemotion
Luciano Murruni illustra gli strumenti e i tool a disposizione per velocizzare e migliorare la scrittura e la qualità del codice della nostra applicazione.
Iscriviti qui per partecipare ad altri Tech Webinar gratuiti: http://goo.gl/iW81VD
Scrivici a: [email protected]
Tw: http://twitter.com/CodemotionTR
SPRING - MAVEN - REST API (ITA - Luglio 2017)Valerio Radice
Introduzione al framework Java Spring e Maven per realizzare API REST.
Breve introduzione all'uso di Maven per configurare un progetto SpringBoot e realizzare un server REST.
Disponibile il codice dimostrativo su github (link nelle slide, attenzione alle branch).
Valerio Radice (valix85)
Luglio 2017
Acadevmy - AngularDay 2018 - Change Detection, Zone.js ed altri mostriFrancesco Sciuti
Un talk dedicato agli aspetti più arcani di Angular tra i quali sono presenti alcuni mostri, che una volta conosciuti non fanno poi così tanta paura. Approfondiamo quindi alcuni aspetti della Change Detection di Angular, proviamo a capire a cosa serve e come funziona Zone.js e se sono presenti in giro altre creature o miti da sfatare!
Introduzione a Docker e alla Dockerizzazione.
Filosofia e progettazione Docker
Comandi principali per gesitere immagini, container, volumi e reti
Dockerfile e docker-compose
Valerio Radice @ Nextre (Maggio 2017)
TAG: docker , Dockerfile , docker-compose , italian , nextre
Java EE facile con Spring Boot - Luigi Bennardis - Codemotion Roma 2015Codemotion
Codemotion Rome 2015 - Costruiamo con Spring Boot una applicazione Java EE con transazioni multiple JDBC-JMS utilizzando H2 e HornetQ (embedded in memory), il supporto di autoconfiguration JAX-RS (Jersey), le annotazioni JSR 250 per i lifecycle hooks, e le annotazioni JSR 330 utilizzabili per AS proprietari e per la portabilità in container di dependency injection come Spring. Per finire distribuiremo su Undertow embedded HTTTP server, su un AS standalone (Apache TomEE) e come PAAS su Cloud Foundry.
Con queste “14 misere” slide ho cercato d’introdurre Liferay e come iniziare con il piede giusto per affrontare lo sviluppo di applicazioni ai voi che siete proprio “novelli”. Spero di essere riuscito con questo primo episodio a suscitare la vostra curiosità e interesse.
Una panoramica delle caratteristiche e delle possibilità che hanno reso Angular uno dei framework più importanti sulla scena frontend.
N.B. Le slides sono aggiornate sino ad Angular 6.
Questo progetto mostra le linee guida per sviluppare un prototipo
creato con Postman, Python Django, HTML, e JavaScript.
Postman & Python, uno sviluppo armonioso.
Postman & Python, a harmonious development for the Web.
Jcn12 ship it day experiences at ambientia 2012 10-24 (hs)Ambientia
ShipIt Days are 24-hour periods where Ambientia employees can work independently or in teams to produce deliverables that may benefit the company. They aim to provide autonomy over tasks, time, techniques, and teams to motivate employees. Past ShipIt projects included improvements to Liferay and Confluence, proof of concepts, process enhancements, and reusable Liferay templates. The format allows for experimentation, innovation, and integrating teams across Finland.
Containerships uses JIRA Service Desk to manage its distributed IT support team across 21 countries more efficiently. This has allowed them to reduce costs by handling first level support in-house instead of outsourcing it. Employees can now access support through a new intranet portal and submit requests for IT issues as well as other business processes like quality incidents and HR requests. Management gains better visibility into support metrics through reporting in JIRA Service Desk.
The document discusses JIRA Portfolio, including what it offers for portfolio management, why it should be used, and how to use it. JIRA Portfolio allows for pipeline management to plan new projects, resource management to allocate resources efficiently, and financial management to track spending and budgets. It integrates with JIRA's issue tracking and time tracking features. The document provides information on portfolio management and encourages readers to discuss how JIRA Portfolio could help address their organization's specific portfolio management challenges.
Transcript of J. Rosenberg's keynote speech at CMC (Claremont McKenna College). Although dating from 2010, still valid to this day. Except maybe rule #13, which I personally would encourage in some cases...
Credits of course go entirely to Jonathan Rosenberg.
Una panoramica sulle diverse possibilità offerte da Spring per applicazioni RIA realizzate in Flex: Spring sul server per l'implementazione di un backend con serializzazione nativa AMF3 con Spring BlazeDS integration, Spring sul client con Spring ActionScript e Spring come usato dallo streaming server opensource Red5 per la realizzazione di applicazioni video. Presentazione tenuta allo Spring Framework Meeting di Settembre 2009 a Cagliari.
Slide del decimo Meetup di Milano, che si è tenuto il 26 Gennaio dalle ore 10:30 alle ore 12:00 in formato virtuale.
Abbiamo parlato insieme a Davide Bonaciti di come ha realizzato un caso d'uso di automazione e CI/CD. Stefano Bernardini, Serena Galassi e Lorenzo Ornella, invece, ci parleranno di DataGraph e ci mostreranno una demo di implementazione per realizzare un'asta del fantacalcio 2.0.
Google App Engine Overview Seminario GDG Genova 4 Ottobre 2013Massimo Caliman
Introduzione a Google App Engine:Cosa è Google App Engine,Linguaggi di programmazione supportati
L'ambiente di Runtime,Static File Servers
Datastore,Services,Namespaces,Google Accounts, OpenID, e OAuth,Task Queues e Cron Jobs,Developer Tools,Administration Console.
Slide delle serate del GDG Milano "App Engine Take Off" del 2015.
In questa serie di incontri vedremo insieme come funziona la piattaforma PaaS di Google App Engine, in particolare con il linguaggio Python. Lo scopo principale sarà spiegare come funziona la piattaforma e realizzare piccole demo e/o snippets che possano tornare utili per lo sviluppo di tutti i giorni. Le serate saranno focalizzate su un topic specifico, iniziando da situazioni semplici ed adatte a tutti, addentrandosi poi, man mano, in situazioni sempre più specifiche.
An overview of technologies and best practices for the development of a full-stack web application using JavaScript. How to realize an entire Application Server with a single programming language, the use of event-driven logic and the potential of Node.js.
Angular js o React? Spunti e idee per la scelta di un frameworkGiovanni Buffa
Come poter scegliere un framework da utilizzare in un progetto per una web applications? Durante questo workshop analizzeremo le parti fondamentali di AngularJs e React, in modo da capire pregi e difetti di ognungo dei due principali strumenti di sviluppo.
In questa presentazione verrà introdotto brevemente il concetto di RIA (Rich Internet Application), di Framework e fondendo i due concetti verranno presentati alcuni dei più conosciuti Framework per la realizzazione di RIA. Visualizza la presentazione.
Come implementare la governance nella vostra piattaforma e lavorare felici se...Giulio Vian
DevOps Conf 2024 - Roma - 10 mag 2024
https://devopsconf.dotnetdev.it
Gli strumenti che usiamo per lo sviluppo e il rilascio sono essenziali per controllare i processi in uso e garantire che soddisfino requisiti aziendali, legali, e regolamentari.
In questa sessione illustrerò come passare da norme (policies) astratte a implementationi su piattaforme come Azure DevOps o GitHub delle stesse così da poter prevenire prima e verificare poi il corretto svolgimento delle operazioni. E diventare amici del direttore Rischi e Audit.
2. Python Web Development
● Web Server Gateway Interface (WSGI): Standard Ufficiale (PEP
333) formalizzato nel 2003 definisce il modo con cui un
applicazione Python deve comunicare con il webserver.
def simple_app(environ, start_response):
"""Simplest possible application object"""
status = '200 OK'
response_headers = [('Content-type', 'text/plain')]
start_response(status, response_headers)
return ['Hello world!n']
● WSGI Request and Response Objects (WebOb): Standard de
facto, definisce un oggetto Request ed uno Response come
astrazione su WSGI.
from webob import Request, Response
def simple_app(environ, start_response):
req = Request(environ)
resp = Response()
resp.content_type = 'text/plain'
resp.body = 'Hello World'
return resp(environ, start_response)
AppEngine + Python - 29.03.2012
3. Serving WSGI Applications
● Python include il modulo wsgiref che implementa un webserver
compatibile WSGI. Python da solo sarebbe quindi già
autosufficiente per lo sviluppo web
from wsgiref.util import setup_testing_defaults
from wsgiref.simple_server import make_server
# A relatively simple WSGI application. It's going to print out the
# environment dictionary after being updated by setup_testing_defaults
def simple_app(environ, start_response):
setup_testing_defaults(environ)
status = '200 OK'
headers = [('Content-type', 'text/plain')]
start_response(status, headers)
ret = ["%s: %sn" % (key, value)
for key, value in environ.iteritems()]
return ret
httpd = make_server('', 8000, simple_app)
print "Serving on port 8000..."
httpd.serve_forever()
AppEngine + Python - 29.03.2012
4. Python Web Frameworks
WebOb Based Others
● Pylons: Un tempo il secondo ● Django: E' il framework più
webframework Python più famoso su Python ed è
famoso dopo Django è ora in totalmente orientato allo
legacy mode. sviluppo rapido.
● Pyramid: Successore di ● Flask: Assieme a Pyramid è il
Pylons è un framework di framework più usato per
medio/basso livello per applicazioni custom di
applicazioni web ad alte medio/basso livello. Basato su
performance. Werkzeug che è il principale
● TurboGears2: Nato come antagonista di WebOb
layer di alto livello su Pylons è Altri: Bottle, Web2Py, Web.Py, etc:
ora un framework indipendente http://wiki.python.
per lo sviluppo rapido. Cerca di org/moin/WebFrameworks
mantenere comunque una
propensione alle
customizzazioni
● AppEngine
AppEngine + Python - 29.03.2012
5. Django
https://www.djangoproject.com
The Web framework for perfectionists with deadlines
● Framework completamente custom
● Incentiva fortemente il riutilizzo di componenti ready made tramite l'uso di un sistema di
applicazioni pluggable
● La velocità non è il suo principale focus, tuttavia si difende bene battendo in velocità soluzioni
come Ruby On Rails.
● Dispatch: Regular Expressions
● Template Engine: Custom, non XML
● ORM: Custom, molto facile da usare ha il difetto di rendere impossibili query molto complesse.
Di default l'orm non è transazionale.
● Forms: Custom, supportano generazione automatica dal modello
● Validazione: Custom, Builtin solo per i form
● Feature Builtin: Django Admin (autogenerazione sezioni ammnistrative), Caching, Sessions,
Load Balancing, Identificazione, Autorizzazione e Autenticazione
AppEngine + Python - 29.03.2012
6. Pyramid
http://www.pylonsproject.org
Web Development with style your way.
● Nato come riscrittura di Pylons
● Totalmente incentrato sulle performance, flessibilità e potenza di sviluppo
● Piccole applicazioni sono rapidamente sviluppabili, per quelle grandi molto lavoro è lasciato al
programmatore.
● E' attualmente uno dei framework più discussi per le sua incredibile flessibilità e performance
che superano quelle della maggior parte delle tecnologie web disponibili
● Dispatch: Regular Expressions o Traversal
● Template Engine: Default ZPT e Mako
● ORM: SQLAlchemy o ZODB
● Forms: Nessuno
● Validazione: Nessuno
● Feature Builtin: Autenticazione e Autorizzazione
● L'assenza di Forms, Validazione etc di default non vuole dire che non si possano fare, ma solo
che bisogna usare librerie esterne.
● In Pyramid esistono gli Scaffold che sono "preconfigurazioni" del framework con specifici
ORM, Templates ed altre librerie. I più famosi sono Khufu, Akhet, etc...
AppEngine + Python - 29.03.2012
7. TurboGears2
http://www.turbogears.org
The next generation web framework that scales with you
● Nato come framework di alto livello per Pylons
● Come Django il principale obiettivo di TurboGears è permettere il rapido sviluppo di
applicazioni web complesse, tuttavia fornisce anche una grande attenzione agli utenti avanzati
permettendo di customizzare a basso livello quasi tutto.
● Dispatch: Object Dispatch
● Template Engine: Genshi e Mako. Supporta nativamente anche Jinja e Kajiki. Di default è
scelto Genshi che è XML compliant
● ORM: SQLAlchemy configurato con Unit of Work in modalità transazionale
● Forms: ToscaWidgets
● Validazione: Builtin per tutto con validatori FormEncode o ToscaWidgets
● Feature Builtin: JSON output, Caching, Sessioni, Identificazione, Autenticazione,
Autorizzazione, TurboGears Admin e tgext.crud per autogenerazione CRUD, Database
Migrations, MongoDB Support.
AppEngine + Python - 29.03.2012
8. Flask
http://flask.pocoo.org
web development one drop at time
● Come Pyramid il suo focus principale è la flessibilità e performance.
● Nasce con poche cose builtin nel framework, ma è dotato di estensioni di ogni genere.
● Dispatch: Regular Expressions
● Template Engine: Jinja
● ORM: Nessuno, ma flask_sqlalchemy (SQLAlchemy) è praticamente lo standard.
● Forms: Nessuno, ma flask_wtf (WTForms) è praticamente lo standard
● Validazione: Nessuno, ma flask_wtf fornisce anche validazione
● Feature Builtin: Praticamente nessuna, ma come Pyramid la filosofia orientata alla flessibilità
ha creato un notevole numero di estensioni già pronte all'uso per molte funzionalità.
AppEngine + Python - 29.03.2012
10. Perché Google App Engine
1. Semplicità di deploy:
a. scrivo il codice;
b. effettuo il deploy lanciando un comando o premendo
un pulsante nel launcher (win o osx);
c. il versioning permette di gestire gli ambienti di test;
2. Gratis per webapp di discrete dimensioni:
a. 1GB stored data;
b. 1GB/day outgoing & incoming bandwidth
c. 28 instance hours/day;
3. Affidabilità:
a. L'HRD ha chiuso il 2011 con il 99,999% di uptime;
4. Dashboard;
AppEngine + Python - 29.03.2012
11. Perché Python su GAE
1. Performances:
a. le JVM basate sul JIT soffrono di lunghi tempi di
startup. Su App Engine il costo di startup è pagato
molto spesso (le istanze vengono accese, spente,
spostate in modo trasparente);
b. JDO e JPA sono più lente di 3-5 volte rispetto alla
Datastore API Python (crud test: http://gaejava.
appspot.com/)
2. Runtime più avanzato:
a. Threads e Concurrent Requests (esclusiva di python2.
7)
b. Google Cloud Storage, NDB, MapReduce, protoRPC e
LogService APIs
3. "The Python Paradox"
AppEngine + Python - 29.03.2012
16. Storing Data
from google.appengine.ext import db
import webapp2
import jinja2
import os
jinja_env = jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.dirname(__file__)))
class Message(db.Model):
title = db.StringProperty()
msg = db.StringProperty()
when = db.DateTimeProperty(auto_now=True)
class MainHandler(webapp2.RequestHandler):
def get(self):
self.response.out.write('Hello world!')
class ParamsHandler(webapp2.RequestHandler):
def get(self):
title = self.request.get('title')
msg = self.request.get('msg')
#store the data
stored_msg = Message(title=title, msg=msg)
## or we can use:
#stored_msg = Message()
#message.title = title
#message.msg = msg
## ---
stored_msg.put()
AppEngine + Python - 29.03.2012
template = jinja_env.get_template('params_handler.html')
17. Querying the Datastore
class RetrieveParams(webapp2.RequestHandler):
def get(self):
#query using the query object interface
messages = db.Query(Message).order('-when')
#query using GQL
messages2 = db.GqlQuery('select * from Message order by when desc')
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('n'.join([' | '.join((msg.title, msg.msg, str(msg.when))) for msg in messages2]))
application = webapp2.WSGIApplication([('/', MainHandler),
('/params_handler[0-9]?', ParamsHandler),
('/retrieve_params', RetrieveParams)],
debug=True)
AppEngine + Python - 29.03.2012
19. Perché TurboGears2
1. Object Dispatch:
a. Il sistema di routing è molto chiaro, guardando un URL
si sa subito dove è implementata e non bisogna
"litigare" con le regular expressions
2. Rapidità di Sviluppo:
a. Il framework fornisce immediatamente login,
permessi, validazione, debugging etc.
b. tgext.crud e turbogears admin permettono di creare
applicazioni web semplici in automatico.
c. Il supporto nativo a ToscaWidgets permette di creare
al volo componenti e Widgets riusabili.
3. Gestione Errori:
a. L'uso di un template XML previene errori di HTML
b. Il framework fornisce debugging interattivo del codice
in caso di 500 e post mortem report in produzione.
c. La unit of work transazionale impedisce di mettere in
stato inconsistente il database in caso di crash.
AppEngine + Python - 29.03.2012
22. Deploy
1. Paste non richiede configurazioni particolari, ma non è
proprio veloce
2. Apache fornisce supporto nativo per TurboGears2 tramite
mod_wsgi.
3. Bello, ma faticoso...
a. RedHat OpenShift!
b. Git come sistema di deploy: "git push"
c. Cloud Solution simile ad AppEngine
d. La soluzione Express è gratuita.
e. TurboGears2 è largamente usato dal progetto Fedora
per molti dei suoi siti, quindi è supportato nativamente
da OpenShift. Le uniche due guide ufficiali passo passo
esistenti per openshift con Python sono proprio per
TurboGears2 e Pyramid.
f. https://openshift.redhat.com/app/express
AppEngine + Python - 29.03.2012