L'utilizzo di dipendenze software è una tecnica entrata già da tempo nella pratica quotidiana di ciascun buon programmatore. I suoi vantaggi sono indubbi ma non tutti sanno come funzionano le dipendenze e come sia possibile rendere disponibile pubblicamente la propria libreria.
In questo talk cerco di spiegare per quale motivo è importante utilizzare dipendenze software, come funzionano, perché può essere utile pubblicare le proprie librerie e come è possibile farlo, mostrando un caso reale basato su Gradle.
Esploriamo docker per scegliere tra un'approccio monolitico tramite le VM o un approccio modulare per una gestione più efficiente e leggera delle applicazioni in ambiente Linux.
Qt Lezione3: un visualizzatore di immaginiPaolo Sereno
Questa lezione sul toolkit Qt permette di scrivere una semplice applicazione di visualizzazione immagini, i formati sono quelli più comunemente usati: JPG, BMP, PNG etc.
Breve introduzione a GIT:
. Iniziare un nuovo progetto o clonarne uno esistente
. primi commit e comandi base
. esempi di utilizzo
Autore: Valerio Radice
tag line:
Tutorial GIT ITA italiano
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passiPaolo Sereno
qtScopo di questa seconda lezione è quello di introdurre l’uso di Qt Creator per scrivere una prima applicazione composta da una main window (QMainWindow).
L’applicazione non fa nulla e serve solamente per impratichirsi con le nozioni di base dell’ambiente di sviluppo Qt.
La lezione è organizzata in pochi semplici passi; ogni passo è corredato da una o più immagini (screenshot) per facilitare la comprensione.
Livin' with Docker - dallo sviluppo alla produzionegiacomos
Presentiamo un caso di studio di un progetto web nato e cresciuto con Docker al centro della scena. Vedremo le soluzioni scelte durante tutto il percorso, partendo da docker-compose in locale, per arrivare a CoreOS e systemd in produzione, passando per la fase di continuous integration/build e il deploy.
Talk DockerOps 13-02-2016, Ferrara
Esploriamo docker per scegliere tra un'approccio monolitico tramite le VM o un approccio modulare per una gestione più efficiente e leggera delle applicazioni in ambiente Linux.
Qt Lezione3: un visualizzatore di immaginiPaolo Sereno
Questa lezione sul toolkit Qt permette di scrivere una semplice applicazione di visualizzazione immagini, i formati sono quelli più comunemente usati: JPG, BMP, PNG etc.
Breve introduzione a GIT:
. Iniziare un nuovo progetto o clonarne uno esistente
. primi commit e comandi base
. esempi di utilizzo
Autore: Valerio Radice
tag line:
Tutorial GIT ITA italiano
Qt Lezione2: Creare un’applicazione con Qt Creator in pochi semplici passiPaolo Sereno
qtScopo di questa seconda lezione è quello di introdurre l’uso di Qt Creator per scrivere una prima applicazione composta da una main window (QMainWindow).
L’applicazione non fa nulla e serve solamente per impratichirsi con le nozioni di base dell’ambiente di sviluppo Qt.
La lezione è organizzata in pochi semplici passi; ogni passo è corredato da una o più immagini (screenshot) per facilitare la comprensione.
Livin' with Docker - dallo sviluppo alla produzionegiacomos
Presentiamo un caso di studio di un progetto web nato e cresciuto con Docker al centro della scena. Vedremo le soluzioni scelte durante tutto il percorso, partendo da docker-compose in locale, per arrivare a CoreOS e systemd in produzione, passando per la fase di continuous integration/build e il deploy.
Talk DockerOps 13-02-2016, Ferrara
Slide del seminario "Intro to Git" tenuto in occasione della Google Dev Fest Campania il 14 ottobre 2016. Si parlerà di come inizializzare un Repository, della configurazione per fare il primo commit e delle ramificazioni, i branch.
Vagrant e Docker a confronto;scegliere ed iniziareDaniele Mondello
Pitch presentato al Linux Day 2015 a Palermo su Vagrant e docker per confrontarli, scegliere ed iniziare. Partendo dal concetto di virtualizzazione, proseguendo con l'analisi delle due soluzioni fino a dare cenni sull'installazione ed un primo utilizzo.
Slide pycon X: https://www.pycon.it/conference/talks/basta-problemi-con-tensorflow-usando-docker-nvidia-docker
Parla di un trucco su come creatre docker container multipli senza avere problemi di duplicazione.
Nell'ultimo quinquennio un nuovo attore si è affacciato sulla scena dell'Information Technology, il suo nome è Docker. Con una crescita esponenziale ed una diffusione ancor più rapida, Docker ha trasformato il modo di percepire e utilizzare l'ICT. Una trasformazione così radicale ed estesa da non poter ignorare la domanda: Cos'è Docker?
Lo scopo di questa giornata è di fornire una risposta a questo interrogativo, mostrando ai partecipanti nuovi scenari, per le realtà dell'Università e della Ricerca, grazie alle possibilità che Docker offre.
Latini Giuliano li guiderà lungo un percorso articolato secondo questi temi:
- Infrastruttura, Isolamento, Idempotenza e DevOps ovvero i vantaggi e i vincoli della definizione formale di un'infrastruttura, concetti teorici e glossario;
- Docker, un facilitatore per utilizzare i Container e le tecnologie ad essi collegate;
- Container vs Hypervisor, le due facce della stessa medaglia: pro, contro ed esempi d'uso;
- Dalla Vm alla Infrastruttura di Servizi, un modo per rimescolare le carte a nostro vantaggio;
- Sviluppo software: esempio d'uso di Docker nello sviluppo di una procedura PHP;
- Gestione di Sistemi: esempio di un'infrastruttura Wordpress organizzata a servizi, definizione formale implementata con Docker;
- Docker Swarm la clusterizzazione ed alta affidabilità, come il sistema risponde e si adatta alle sollecitazioni esterne in un sistema di calcolo;
L'obiettivo finale è fornire ai partecipanti un gruppo di concetti ed esempi grazie ai quali poter approfondire autonomamente Docker, personalizzandone l'uso per le proprie necessità; in alternativa ad una trattazione dettagliata ed esaustiva di tutti i temi illustrati, impossibile nel tempo a disposizione.
A conclusione del corso verrano messi a disposizione, come materiale didattico da approfondire: slide, esempi e bibliografia di riferimento.
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.
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
L'architettura di Stack Overflow - Mario Cecconi - Codemotion Milan 2014Codemotion
In this talk, I will describe: The physical architecture of Stack Overflow. How many servers are there? What is their purpose and what are their specs? The logical architecture of the software. How do we scale up? What are the main building blocks of our software? The tooling system. What supports our extreme optimization philosophy? The development team. What are our core values? What footprint do we want to leave as developers? Stack Exchange & Stack Overflow have been growing exponentially since 2008. They now encompass:120+ Q&A sites and millions of questions and answers.
Slide e riferimenti al codice del Meetup del 28/02/2019 del Vue JS Milano dove parlo di creazione di componenti, passaggio di parametri, computed properties
This is an old presentation I've given for a Lunch&Learn in my previous job. In this presentation I'm trying to explain the concept of Inversion of Control, It's advantages and how Test Driven Development forces you to embrace this approach. When the dependencies becomes many the need for a framework arise, those frameworks are usually called IoC. Than quickly I intruduce the difference in Dynamic Languages as Ruby.
Slide del seminario "Intro to Git" tenuto in occasione della Google Dev Fest Campania il 14 ottobre 2016. Si parlerà di come inizializzare un Repository, della configurazione per fare il primo commit e delle ramificazioni, i branch.
Vagrant e Docker a confronto;scegliere ed iniziareDaniele Mondello
Pitch presentato al Linux Day 2015 a Palermo su Vagrant e docker per confrontarli, scegliere ed iniziare. Partendo dal concetto di virtualizzazione, proseguendo con l'analisi delle due soluzioni fino a dare cenni sull'installazione ed un primo utilizzo.
Slide pycon X: https://www.pycon.it/conference/talks/basta-problemi-con-tensorflow-usando-docker-nvidia-docker
Parla di un trucco su come creatre docker container multipli senza avere problemi di duplicazione.
Nell'ultimo quinquennio un nuovo attore si è affacciato sulla scena dell'Information Technology, il suo nome è Docker. Con una crescita esponenziale ed una diffusione ancor più rapida, Docker ha trasformato il modo di percepire e utilizzare l'ICT. Una trasformazione così radicale ed estesa da non poter ignorare la domanda: Cos'è Docker?
Lo scopo di questa giornata è di fornire una risposta a questo interrogativo, mostrando ai partecipanti nuovi scenari, per le realtà dell'Università e della Ricerca, grazie alle possibilità che Docker offre.
Latini Giuliano li guiderà lungo un percorso articolato secondo questi temi:
- Infrastruttura, Isolamento, Idempotenza e DevOps ovvero i vantaggi e i vincoli della definizione formale di un'infrastruttura, concetti teorici e glossario;
- Docker, un facilitatore per utilizzare i Container e le tecnologie ad essi collegate;
- Container vs Hypervisor, le due facce della stessa medaglia: pro, contro ed esempi d'uso;
- Dalla Vm alla Infrastruttura di Servizi, un modo per rimescolare le carte a nostro vantaggio;
- Sviluppo software: esempio d'uso di Docker nello sviluppo di una procedura PHP;
- Gestione di Sistemi: esempio di un'infrastruttura Wordpress organizzata a servizi, definizione formale implementata con Docker;
- Docker Swarm la clusterizzazione ed alta affidabilità, come il sistema risponde e si adatta alle sollecitazioni esterne in un sistema di calcolo;
L'obiettivo finale è fornire ai partecipanti un gruppo di concetti ed esempi grazie ai quali poter approfondire autonomamente Docker, personalizzandone l'uso per le proprie necessità; in alternativa ad una trattazione dettagliata ed esaustiva di tutti i temi illustrati, impossibile nel tempo a disposizione.
A conclusione del corso verrano messi a disposizione, come materiale didattico da approfondire: slide, esempi e bibliografia di riferimento.
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.
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
L'architettura di Stack Overflow - Mario Cecconi - Codemotion Milan 2014Codemotion
In this talk, I will describe: The physical architecture of Stack Overflow. How many servers are there? What is their purpose and what are their specs? The logical architecture of the software. How do we scale up? What are the main building blocks of our software? The tooling system. What supports our extreme optimization philosophy? The development team. What are our core values? What footprint do we want to leave as developers? Stack Exchange & Stack Overflow have been growing exponentially since 2008. They now encompass:120+ Q&A sites and millions of questions and answers.
Slide e riferimenti al codice del Meetup del 28/02/2019 del Vue JS Milano dove parlo di creazione di componenti, passaggio di parametri, computed properties
This is an old presentation I've given for a Lunch&Learn in my previous job. In this presentation I'm trying to explain the concept of Inversion of Control, It's advantages and how Test Driven Development forces you to embrace this approach. When the dependencies becomes many the need for a framework arise, those frameworks are usually called IoC. Than quickly I intruduce the difference in Dynamic Languages as Ruby.
2. #IOextendedGE16
DIPENDENZE
+PaoloMontalto
Librerie di terze parti o altri progetti necessari
alla compilazione di un progetto software
Non ha senso:
¤ Reinventare la ruota ad ogni nuovo progetto
¤ Portarsi dietro delle classi facendo copia e incolla da altri progetti
¤ Portarsi dietro dei jar di versione e provenienza dubbia
¤ Fare copia e incolla da Stackoverflow
3. #IOextendedGE16
DIPENDENZE
+PaoloMontalto
Librerie di terze parti o altri progetti necessari
alla compilazione di un progetto software
Non ha senso:
¤ Reinventare la ruota ad ogni nuovo progetto
¤ Portarsi dietro delle classi facendo copia e incolla da altri progetti
¤ Portarsi dietro dei jar di versione e provenienza dubbia
¤ Fare copia e incolla da Stackoverflow
build automation
4. #IOextendedGE16
MAVEN
+PaoloMontalto
Forse il più noto sistema di build automation
¤ consente di definire il ciclo di vita di un processo di build
¤ definisce le dipendenze del proge4o
¤ file di configurazione basa5 su XML
¤ repository di librerie
Identifica le dipendenze tramite
groupId identifica il progetto univocamente it.xabaras.android.logger
artifactId è il nome della libreria (senza versione) Logger
version è il numero di versione della libreria 1.3.6
E’ possibile distribuire più artifact nella stessa versione:
libreria, documentazione, sorgenti
6. version
#IOextendedGE16
GRADLE
+PaoloMontalto
Sistema di build automation
¤ mul5pia4aforma
¤ mul5linguaggio
¤ mul5proge4o
¤ DSL basato su groovy
¤ build incrementali
¤ notazione compa4a per le dipendenze
¤ Usa maven come repository locale/remoto per le dipendenze
compile 'it.xabaras.android.logger:Logger:1.3.6’
groupId
ar5factId dependencies {
}
8. #IOextendedGE16
MAVEN CENTRAL VS JCENTER
+PaoloMontalto
Maven Central
h4p://search.maven.org
JCenter
h4p://jcenter.bintray.com
repositories {
mavenCentral()
}
repositories {
jcenter()
}
9. #IOextendedGE16
MAVEN CENTRAL VS JCENTER
+PaoloMontalto
Maven Central
h4p://search.maven.org
JCenter
h4p://jcenter.bintray.com
Sonatype
¤ Linea di commando
¤ Jira ticket
¤ cifratura build
JFrog
¤ Web UI
¤ semplice da usare (no cifratura)
¤ Integrazione con GitHub e BitBucket
¤ Sincronizzazione con Maven Central
¤ Statistiche di download
10. #IOextendedGE16
MAVEN CENTRAL VS JCENTER
+PaoloMontalto
Maven Central
h4p://search.maven.org
JCenter
h4p://jcenter.bintray.com
Sonatype
¤ Linea di commando
¤ Jira ticket
¤ cifratura build
JFrog
¤ Web UI
¤ semplice da usare (no cifratura)
¤ Integrazione con GitHub e BitBucket
¤ Sincronizzazione con Maven Central
¤ Statistiche di download
>=
mavenCentral()
28. #IOextendedGE16
CARICARE GLI ARTIFACT SU BINTRAY 3
+PaoloMontalto
La libreria è sul vostro repository maven ma non su jcenter
repositories {
maven {
url 'h4ps://dl.bintray.com/xabaras/maven'
}
}
...
dependencies {
compile 'it.xabaras.android.logger:Logger:1.3.6'
}
32. #IOextendedGE16
PRONTI AD USARE LA LIBRERIA PUBBLICATA
+PaoloMontalto
repositories {
jcenter()
}
dependencies {
…
compile 'it.xabaras.android.logger:Logger:1.3.6’
…
}
33. #IOextendedGE16
PUBBLICARE ANCHE SU MAVEN CENTRAL
+PaoloMontalto
¤ Creare un account Sonatype
¤ Creare una issue su JIRA
¤ Aggiungere lo username Sonatype su Bintray
¤ Abilitare l’auto signing delle build su Bintray (coppia chiavi GPG)
¤ Configurare il build.gradle
¤ Caricare gli artifact su bintray
¤ Sincronizzare il repository con Maven Central
34. #IOextendedGE16
PUBBLICARE ANCHE SU MAVEN CENTRAL 2
+PaoloMontalto
¤ Creare un account Sonatype
¤ Creare una issue su JIRA
¤ Aggiungere lo username Sonatype su Bintray
¤ Abilitare l’auto signing delle build su Bintray (coppia chiavi GPG)
¤ Configurare il build.gradle
¤ Caricare gli artifact su bintray
¤ Sincronizzare il repository con Maven Central
35. #IOextendedGE16
PUBBLICARE ANCHE SU MAVEN CENTRAL 3
+PaoloMontalto
¤ Creare un account Sonatype
¤ Creare una issue su JIRA
¤ Aggiungere lo username Sonatype su Bintray
¤ Abilitare l’auto signing delle build su Bintray (coppia chiavi GPG)
¤ Configurare il build.gradle
¤ Caricare gli artifact su bintray
¤ Sincronizzare il repository con Maven Central
36. #IOextendedGE16
PUBBLICARE ANCHE SU MAVEN CENTRAL 4
+PaoloMontalto
¤ Creare un account Sonatype
¤ Creare una issue su JIRA
¤ Aggiungere lo username Sonatype su Bintray
¤ Abilitare l’auto signing delle build su Bintray (coppia chiavi GPG)
¤ Configurare il build.gradle
¤ Caricare gli artifact su bintray
¤ Sincronizzare il repository con Maven Central
37. #IOextendedGE16
PUBBLICARE ANCHE SU MAVEN CENTRAL 5
+PaoloMontalto
¤ Creare un account Sonatype
¤ Creare una issue su JIRA
¤ Aggiungere lo username Sonatype su Bintray
¤ Abilitare l’auto signing delle build su Bintray (coppia chiavi GPG)
¤ Configurare il build.gradle
¤ Caricare gli artifact su bintray
¤ Sincronizzare il repository con Maven Central
38. #IOextendedGE16
PUBBLICARE ANCHE SU MAVEN CENTRAL 5
+PaoloMontalto
¤ local.properties
bintray_gpg_password=LA_MIA_PASSWORD_GPG
¤ build.gradle
bintray {
configurations = [’archives’]
publications = ['mavenStuff']
version {
…
gpg {
sign = true
passphrase = properties.getProperty('bintray_gpg_password’)
}
}
39. #IOextendedGE16
PUBBLICARE ANCHE SU MAVEN CENTRAL 5
+PaoloMontalto
¤ build.gradle
publishing {
publications {
mavenStuff(MavenPublication) {
from components.java
groupId group
artifactId rootProject.name
version version
artifact sourcesJar
artifact javadocJar
pom.withXml {
// package name, description, licenses and developer info
}
}
}
}
40. #IOextendedGE16
PUBBLICARE ANCHE SU MAVEN CENTRAL 6
+PaoloMontalto
¤ Creare un account Sonatype
¤ Creare una issue su JIRA
¤ Aggiungere lo username Sonatype su Bintray
¤ Abilitare l’auto signing delle build su Bintray (coppia chiavi GPG)
¤ Configurare il build.gradle
¤ Caricare gli artifact su bintray
¤ Sincronizzare il repository con Maven Central
41. #IOextendedGE16
PUBBLICARE ANCHE SU MAVEN CENTRAL 7
+PaoloMontalto
¤ Creare un account Sonatype
¤ Creare una issue su JIRA
¤ Aggiungere lo username Sonatype su Bintray
¤ Abilitare l’auto signing delle build su Bintray (coppia chiavi GPG)
¤ Configurare il build.gradle
¤ Caricare gli artifact su bintray
¤ Sincronizzare il repository con Maven Central
49. #IOextendedGE16
QUALCHE RIFERIMENTO
+PaoloMontalto
¤ How to distribute your own Android library through jCenter and Maven Central from
Android Studio @TheCheeseFact
¤ Distribute your libraries via Maven, even privately @molsjeroen
¤ Getting Started Using the Gradle Bintray Plugin bintray/gradle-bintray-plugin
Non si sa che versione stiamo usando di una data libreria e non è facile capirlo
Molto più utile è avere un sistema che mi permetta di specificare quali librerie uso all’interno del mio progetto, senza preoccuparmi o preoccupandomi relativamente di come queste sono gestite, manutenute, reperite
Non si sa che versione stiamo usando di una data libreria e non è facile capirlo
Molto più utile è avere un sistema che mi permetta di specificare quali librerie uso all’interno del mio progetto, senza preoccuparmi o preoccupandomi relativamente di come queste sono gestite, manutenute, reperite
Chiama artifact i deliverables
Chiama artifact i deliverables
Apache Maven definisce il ciclo di vita di un processo, in Apache Ant ordine dei target dipende dalle dipendenze, Gradle è basato su grafo e determina quali task vanno rieseguiti o meno
Multilinguaggio: decine di lunguaggi tra i quali Java, Python, Scala, C++, Android, Objective-C, Javascript
Includo le mie librerie come dipendenze anche nei miei progetti
Le librerie vengono scaricate da server quali mavenCentral o Jcenter e quindi siamo sicuri che quando usiamo una libreria questa provenga realmente dallo sviluppatore che l’ha creata
Siamo sicuri che versioni diverse di una libreria provengano sempre dallo stesso sviluppatore
Sviluppatori all’interno dell’azienda useranno la stessa codebase
Sono due i principali repository
Maven Central è storicamente il repository di default di maven e anche di apache ant
Jcenter fornisce artifact via CDN --> + veloce
Jcenter è un sovrainsieme di maven central
Jcenter è il default per android
E’ possibile accedere tramite il proprio account GitHub, Twitter o Google+
Non le mettete nel build.gradle e soprattutto ricordatevi di non caricare local.properties su git
Siccome voglio caricare anche i sorgenti e la documentazione della mia libreria ho aggiunto questi due task
Add to Jcenter è un’operazione che va fatta una sola volta, poi, quando pubblicate una nuova versione della vostra libreria questa verrà sincronizzata direttamente con jecenter
Issue Jira: per chiedere il permesso di distribuire la libreria tramite Maven Central
GPG: creare o avere una coppia di chiavi gpg caricarla sul server delle chiavi e inserirle su Bintray
build.gradle oltre ad aggiungere i target maven e le credenziali sonatype devo anche preparare le informazioni per il file pom
Issue Jira: per chiedere il permesso di distribuire la libreria tramite Maven Central
GPG: creare o avere una coppia di chiavi gpg caricarla sul server delle chiavi e inserirle su Bintray
build.gradle oltre ad aggiungere i target maven e le credenziali sonatype devo anche preparare le informazioni per il file pom
Sostituire configurations[‘archives’] con publications = ['mavenStuff']
La sincronizzazione con maven va fatta puntualmente per ogni versione della libreria
Nell’ultima versione del plugin bintray dovrebbe essere possibile sincronizzare con maven in automatico
E’ un tipo di archivio creato appositamente per librerie android che sono più complesse perché contengono risorse, configurazioni, altre librerie…
I due apply vanno in fondo al file sono due script che fanno sostanzialmente quello che abbiamo fatto noi con la libreria jar ma sono scritti per la struttura di un aar che è più complessa
Questi due script che automatizzano un po’ tutto quello che abbiamo fatto finora per la libreria java creando il pom e mettendo le informazioni al posto giusto sia nella sezione del plugin bintray che nella sezione maven