SlideShare une entreprise Scribd logo
1  sur  47
Télécharger pour lire hors ligne
Ubuntu Phone: the community smartphone 
Giulio Collura
Ubuntu 
› a new force in mobile
Il futuro del computing 
› Ubuntu funziona su smartphone, desktop, 
server e cloud 
› Interfaccia veloce e intuitiva per ogni 
dispositivo 
› Core Apps di qualità e un ecosistema di app in 
continua crescita 
› Ubuntu SDK con supporto nativo e HTML5 
› Differenziazione senza frammentazione
Spazio agli sviluppatori 
Ubuntu fornisce tutti gli strumenti necessari 
allo sviluppo 
› Ubuntu SDK 
› Applicazioni native e HTML5 
› Portale con documentazione, tutorial e 
API reference 
› Linee guida per il design 
› Processo di upload e pubblicazione app 
semplice e sicuro 
› Ubuntu Store 
› Comunità di sviluppatori e designer 
attiva e entusiasta
Design 
Un telefono in cui 
ti puoi rispecchiare 
› Focus sui contenuti 
› Interazioni semplici, veloci e naturali 
› Stile unico
Ubuntu User Experience 
› Spazio ai contenuti 
› Gestures semplici e intuitive
Unity 
› Unity è la shell di Ubuntu 
› Per gli utenti, fornisce una semplice e touch-ready
La piattaforma Ubuntu 
› Sistema Operativo Ubuntu, con un layer Android per il device 
› Unity 
› Ubuntu SDK fornisce API trasparente per l'accesso ai servizi, device
Convergenza 
› QtQuick 
› Non solo adattamento nella dimensione dei 
componenti, design e modi d'uso devono essere 
ottimizzati 
› La prima versione LTS a essere completamente 
convergente sarà la 16.04 
› Unity 8, già in uso su smartphone e tablet, 
rimpiazzerà Unity 7 nella versione desktop
foundations 
› SDK
Ubuntu SDK 
› Fornisce tutti gli strumenti per sviluppare app 
semplicemente 
› Disponibile per numerosi linguaggi: 
› QML, linguaggio dichiarativo utile a descrivere 
l'interfaccia utente di un programma 
› Javascript 
› C++ 
› HTML5
QtQuick 
› Interfacce utente semplici e veloci 
› Design-oriented 
› Sviluppo rapido 
› Il QML è un linguaggio dichiarativo che 
consente agli oggetti di essere definiti secondo 
le loro proprietà e di come possono interagire 
e rispondere ai cambiamenti
Componenti 
› Layouts 
› Resolution Independence 
› Localizzazioni 
› Cloud-ready 
› Emulatore 
› Servizi 
› Command-line parsing
Ambiente di sviluppo 
› Qt Creator 
› Completo supporto al C++ e QML 
› Interfaccia grafica per la gestione del dispositivo 
› Connessione al device tramite SSH (Secure Shell) 
› Permette l'avvio e l'interruzione di applicazioni 
durante lo sviluppo 
› Comprende tool di packaging, convalida e 
installazione 
› Cross-compilation direttamente dal desktop 
› Accesso diretto alla documentazione 
› Linea di comando
Ciclo di vita di una app 
› Le app sono sospese quando non visibili 
› Il ciclo di vita di una app è progettato per essere semplice, sicuro 
e ottimizzare il consumo di batteria
Sicurezza 
› Tutte le app sono confinate grazie ad 
AppArmor, tramite specifiche restrizioni 
› AppArmor è un modulo di sicurezza del kernel 
› Ogni app possiede un profilo AppArmor 
definito tramite un file di configurazione 
› Ogni app può solo scrivere nella propria 
directory 
› Lo scambio di informazioni tra app è consentito 
tramite ContentHub
Qt/QML e web app 
› Supporto completo per 
entrambe le piattaforme di 
sviluppo 
› Massime performance con il 
supporto nativo 
› Tutte le potenzialità del web 
grazie alle web app 
› HTML 5 e CCS 3 
› Nessuna modifica richiesta alle 
webapp già esistenti
App native 
› Scrivere app native per sfruttare 
tutta la potenza del dispositivo 
› QML + Javascript + C++ (e Go) 
› Il Javascript si integra 
direttamente nel QML 
› Grazie alle librerie Qt, il C++ non 
è mai stato così semplice da 
usare 
› C++ per il backend come un 
plugin, QML per il frontend
Click packages 
› I pacchetti Click (.click) sono il nuovo modo in cui 
sono impacchettate, distribuite e installate le app 
per Ubuntu Touch e, in futuro, Ubuntu Desktop 
› Progettati per essere semplici, veloci e sicuri, 
grazie all'integrazione di AppArmor 
› Forniscono isolamento tra aggiornamenti del 
sistema e delle app 
› Gli aggiornamenti del sistema vengono forniti tramite 
aggiornamenti OTA (over-the-air) incrementali 
› Gli aggiornamenti delle app tramite pacchetti click
app project 
› design › develop › publish
Installazione 
› Tramite terminale: 
› Per Ubuntu 12.04 LTS e 14.04 LTS 
sudo add-apt-repository ppa:ubuntu-sdk-team/ppa && sudo apt-get 
update && sudo apt-get dist-upgrade && sudo apt-get install 
ubuntu-sdk 
› Per versioni in sviluppo 
sudo apt-get update && sudo apt-get install ubuntu-sdk
Nuovo progetto 
› Idee 
› Nuove applicazioni 
› Porting di Harmattan apps 
› Remake di app iOS e Android 
› Tutorial 
› Disponibili in rete http://developer.ubuntu.com 
› Design guidelines 
› http://design.ubuntu.com/apps 
› Reference 
› Core Apps
› Kit: ambiente con architettura emulata armhf o i386 
› Consente la cross-compilation e la cross-configuration di una 
app
› Gestione del device direttamente da QtCreator 
› Sono forniti anche tool da linea di comando 
› sudo apt-get install phablet-tools
Struttura del QML 
› Il QML è un linguaggio dichiarativo 
› Specificare un id serve a rendere il 
componente accessibile da altre parti nel 
codice 
› Esempio: 
Rectangle { 
id: canvas 
width: 200 
height: 200 
color: "blue" 
}
› Gli oggetti possono essere innestati 
import QtQuick 2.0 
Rectangle { 
id: rect 
width: 300 
height: 300 
color: "orange" 
Image { 
id: logo 
source: "calculator.svg" 
anchors.centerIn: parent 
height: rect.height / 2 
width: rect.width / 2 
} 
} 
› Notare come logo acceda alle proprietà di rect
Integrazione JavaScript e QML 
Codice JavaScript può essere integrato con 
semplicità per fornire controllo sugli elementi e 
altri benefici 
Item { 
width: randomNumber() 
height: width < 100 ? 100 : (width + 50) / 2 
function randomNumber() { 
return Math.random() * 360; 
} 
}
MainView 
› Componente principale per 
tutte le applicazioni 
› Aggiunge automaticamente 
un header, utile alla gestione 
di Tab e comandi 
› Ruota automaticamente i 
contenuti a seconda della 
rotazione del device 
› Modulo di 
Ubuntu.Components 
› import Ubuntu.Components 1.0
main.qml 
import QtQuick 2.1 
import Ubuntu.Components 1.1 
import "ui" 
MainView { 
objectName: "mainView" 
applicationName: "com.ubuntu.developer.<devname>.<appname>" 
Tabs { 
id: tabs 
HelloTab { 
objectName: "helloTab" 
} 
WorldTab { 
objectName: "worldTab" 
} 
} 
}
Resolution Independence 
› L'obiettivo è rendere semplice lo sviluppo di 
interfacce grafiche scalabili per ogni form 
factor 
› Grid Unit (gu) 
› Density Indipendent Pixel (dp) 
Device Conversione 
Comuni schermi 
(laptop, desktop) 1 gu = 8 px 
Retina display 1 gu = 16 px 
Smartphones 1 gu = 18 px 
Tablet 1 gu = 10 px
Nuovi componenti 
› È utile creare nuovi componenti esternamente 
per modularizzare la propria applicazione 
› Molto semplice 
› È necessario creare un nuovo modulo .qml 
all'interno del progetto
Esempio 
components/HelloComponent.qml 
import QtQuick 2.0 
import Ubuntu.Components 0.1 
UbuntuShape { 
width: 200 
height: width 
property alias text: myText.text 
Label { 
id: myText 
anchors.centerIn: parent 
} 
} 
main.qml 
import QtQuick 2.0 
import Ubuntu.Components 0.1 
import "components" 
MainView { 
width: units.gu(48) 
height: units.gu(60) 
Page { 
title: "Example page" 
HelloComponent { 
anchors.centerIn: parent 
text: "Hello world!" 
} 
} 
}
Convergenza 
› Una sola codebase per tutti i dispositivi 
› Uso efficiente dello spazio dello schermo 
› Interfacce dinamiche
Layouts
Ubuntu.Layouts 
› Componente dell'SDK utile a posizionare i vari 
elementi date certe condizioni 
› import Ubuntu.Layouts 1.0 
› Elementi 
› Layouts 
› ItemLayout 
› ConditionalLayout
U1db 
› Modulo per la gestione di un database basato 
su JSON objects 
› Molto semplice da usare 
› Comodo per salvare impostazioni e 
informazioni permanentemente con 
sincronizzazione cross device 
› import U1db 1.0 as U1db 
› Policy: networking
The Ubuntu dash and scopes architecture 
› Ricerche veloci attraverso la Dash 
› Le Scope sono responsabili di fornire alla Dash i 
risultati di ricerca tramite specifiche categorie
Scopes 
› Finestra su un mondo di contenuti
Scopes data flow
Scope API 
› API in C++ 
› Separazione tra Data e View 
› Personalizzabili 
› Più visibilità al brand 
› Giusta importanza ai giusti 
contenuti
Community 
› Piattaforma di sviluppo 
› Launchpad – launchpad.net 
› IRC: 
› Internazionali: 
› #ubuntu-touch 
› #ubuntu-app-devel 
› Italiani: 
› #ubuntu-it 
› #ubuntu-it-dev 
› Ask 
› http://askubuntu.com/ 
› http://chiedi.ubuntu-it.org/ 
› Facebook 
› Gruppo ubuntu-it
Come collaborare alle Core Apps 
› Registrarsi a Launchpad 
› Collegarsi a 
› https://launchpad.net/ubuntu-phone-coreapps/ 
› Scegliere un progetto 
› bzr branch lp:<repo-name> 
› Hack! 
› … 
› Richiedi una Merge Proposal 
› bzr lp-propose-merge
Squash bugs! 
› Ogni progetto ha un proprio bug tracker 
›
Domande
Contatti 
Email: giulio.collura@gmail.com 
Twitter: @gcollura93 
Github, Launchpad, IRC: gcollura 
Le slide saranno disponibili sulla mia pagina web: 
http://gcollura.github.io/projects 
Grazie!

Contenu connexe

En vedette

Partecipare al ciclo di sviluppo di Ubuntu - 2ª Parte
Partecipare al ciclo di sviluppo di Ubuntu - 2ª PartePartecipare al ciclo di sviluppo di Ubuntu - 2ª Parte
Partecipare al ciclo di sviluppo di Ubuntu - 2ª PartePaolo Sammicheli
 
Partecipare al ciclo di sviluppo di Ubuntu - 1ª Parte
Partecipare al ciclo di sviluppo di Ubuntu - 1ª PartePartecipare al ciclo di sviluppo di Ubuntu - 1ª Parte
Partecipare al ciclo di sviluppo di Ubuntu - 1ª PartePaolo Sammicheli
 
Lezione tenuta allo IED PA digitale maggio 2011
Lezione tenuta allo IED PA digitale maggio 2011Lezione tenuta allo IED PA digitale maggio 2011
Lezione tenuta allo IED PA digitale maggio 2011Vianello Michele
 
GNOME Shell VS Ubuntu Unity - Codemotion Rome 2011
GNOME Shell VS Ubuntu Unity - Codemotion Rome 2011GNOME Shell VS Ubuntu Unity - Codemotion Rome 2011
GNOME Shell VS Ubuntu Unity - Codemotion Rome 2011Flavia Weisghizzi
 
Lug Roma3 Corso Linux Avanzato
Lug Roma3   Corso Linux AvanzatoLug Roma3   Corso Linux Avanzato
Lug Roma3 Corso Linux Avanzatofosk
 
Ubuntu Unity e GNOME Shell
Ubuntu Unity e GNOME ShellUbuntu Unity e GNOME Shell
Ubuntu Unity e GNOME ShellLuca Ferretti
 
Set up and management of an integrated information system on Linux.
Set up and management of an integrated information system on Linux.Set up and management of an integrated information system on Linux.
Set up and management of an integrated information system on Linux.Andrea Marchetti
 

En vedette (8)

Partecipare al ciclo di sviluppo di Ubuntu - 2ª Parte
Partecipare al ciclo di sviluppo di Ubuntu - 2ª PartePartecipare al ciclo di sviluppo di Ubuntu - 2ª Parte
Partecipare al ciclo di sviluppo di Ubuntu - 2ª Parte
 
this = that
this = that this = that
this = that
 
Partecipare al ciclo di sviluppo di Ubuntu - 1ª Parte
Partecipare al ciclo di sviluppo di Ubuntu - 1ª PartePartecipare al ciclo di sviluppo di Ubuntu - 1ª Parte
Partecipare al ciclo di sviluppo di Ubuntu - 1ª Parte
 
Lezione tenuta allo IED PA digitale maggio 2011
Lezione tenuta allo IED PA digitale maggio 2011Lezione tenuta allo IED PA digitale maggio 2011
Lezione tenuta allo IED PA digitale maggio 2011
 
GNOME Shell VS Ubuntu Unity - Codemotion Rome 2011
GNOME Shell VS Ubuntu Unity - Codemotion Rome 2011GNOME Shell VS Ubuntu Unity - Codemotion Rome 2011
GNOME Shell VS Ubuntu Unity - Codemotion Rome 2011
 
Lug Roma3 Corso Linux Avanzato
Lug Roma3   Corso Linux AvanzatoLug Roma3   Corso Linux Avanzato
Lug Roma3 Corso Linux Avanzato
 
Ubuntu Unity e GNOME Shell
Ubuntu Unity e GNOME ShellUbuntu Unity e GNOME Shell
Ubuntu Unity e GNOME Shell
 
Set up and management of an integrated information system on Linux.
Set up and management of an integrated information system on Linux.Set up and management of an integrated information system on Linux.
Set up and management of an integrated information system on Linux.
 

Similaire à Ubuntu Phone: the community smartphone

Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker dotnetcode
 
ASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerLuca Congiu
 
2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...
2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...
2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...Marco Parenzan
 
Flutter: Google alla conquista del mobile multi piattaforma
Flutter: Google alla conquista del mobile multi piattaformaFlutter: Google alla conquista del mobile multi piattaforma
Flutter: Google alla conquista del mobile multi piattaformaCommit University
 
Meetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure FunctionsMeetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure Functionsdotnetcode
 
Introduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile AndroidIntroduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile AndroidOpen Makers Italy
 
Osd 2016 Middleware Track
Osd 2016 Middleware TrackOsd 2016 Middleware Track
Osd 2016 Middleware TrackUgo Landini
 
Android: Introduzione all'architettura, alla programmazione e alla sicurezza
Android: Introduzione all'architettura, alla programmazione e alla sicurezzaAndroid: Introduzione all'architettura, alla programmazione e alla sicurezza
Android: Introduzione all'architettura, alla programmazione e alla sicurezzajekil
 
Le Novita’ dello sviluppo applicazioni per IBM i
Le Novita’ dello sviluppo applicazioni per IBM iLe Novita’ dello sviluppo applicazioni per IBM i
Le Novita’ dello sviluppo applicazioni per IBM iS.info Srl
 
Evento 18 giugno - Sviluppo applicativo
Evento 18 giugno - Sviluppo applicativoEvento 18 giugno - Sviluppo applicativo
Evento 18 giugno - Sviluppo applicativoPRAGMA PROGETTI
 
Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net Leonardo Alario
 
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1Daniele Falamesca
 
GWT Development for Handheld Devices
GWT Development for Handheld DevicesGWT Development for Handheld Devices
GWT Development for Handheld DevicesGWTcon
 
Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20Romualdo Gobbo
 
Flash Platform su dispositivi mobili
Flash Platform su dispositivi mobiliFlash Platform su dispositivi mobili
Flash Platform su dispositivi mobililuca mezzalira
 
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023AndreaStagi3
 
Dal cloud al mobile con tecnologie Google
Dal cloud al mobile con tecnologie GoogleDal cloud al mobile con tecnologie Google
Dal cloud al mobile con tecnologie GoogleDiego Giorgini
 
Meetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web AppMeetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web Appdotnetcode
 

Similaire à Ubuntu Phone: the community smartphone (20)

Introduzione ad Android
Introduzione ad AndroidIntroduzione ad Android
Introduzione ad Android
 
Introduzione a .Net Core
Introduzione a .Net CoreIntroduzione a .Net Core
Introduzione a .Net Core
 
Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker Meetup ASP.NET Core 2 e Docker
Meetup ASP.NET Core 2 e Docker
 
ASP.NET Core 2 e Docker
ASP.NET Core 2 e DockerASP.NET Core 2 e Docker
ASP.NET Core 2 e Docker
 
2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...
2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...
2014.04.04 Sviluppare applicazioni web (completamente) on line con Visual Stu...
 
Flutter: Google alla conquista del mobile multi piattaforma
Flutter: Google alla conquista del mobile multi piattaformaFlutter: Google alla conquista del mobile multi piattaforma
Flutter: Google alla conquista del mobile multi piattaforma
 
Meetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure FunctionsMeetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure Functions
 
Introduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile AndroidIntroduzione al sistema operativo mobile Android
Introduzione al sistema operativo mobile Android
 
Osd 2016 Middleware Track
Osd 2016 Middleware TrackOsd 2016 Middleware Track
Osd 2016 Middleware Track
 
Android: Introduzione all'architettura, alla programmazione e alla sicurezza
Android: Introduzione all'architettura, alla programmazione e alla sicurezzaAndroid: Introduzione all'architettura, alla programmazione e alla sicurezza
Android: Introduzione all'architettura, alla programmazione e alla sicurezza
 
Le Novita’ dello sviluppo applicazioni per IBM i
Le Novita’ dello sviluppo applicazioni per IBM iLe Novita’ dello sviluppo applicazioni per IBM i
Le Novita’ dello sviluppo applicazioni per IBM i
 
Evento 18 giugno - Sviluppo applicativo
Evento 18 giugno - Sviluppo applicativoEvento 18 giugno - Sviluppo applicativo
Evento 18 giugno - Sviluppo applicativo
 
Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net
 
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
 
GWT Development for Handheld Devices
GWT Development for Handheld DevicesGWT Development for Handheld Devices
GWT Development for Handheld Devices
 
Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20Omnis italianmeeting 2016-10-20
Omnis italianmeeting 2016-10-20
 
Flash Platform su dispositivi mobili
Flash Platform su dispositivi mobiliFlash Platform su dispositivi mobili
Flash Platform su dispositivi mobili
 
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023
 
Dal cloud al mobile con tecnologie Google
Dal cloud al mobile con tecnologie GoogleDal cloud al mobile con tecnologie Google
Dal cloud al mobile con tecnologie Google
 
Meetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web AppMeetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web App
 

Ubuntu Phone: the community smartphone

  • 1. Ubuntu Phone: the community smartphone Giulio Collura
  • 2. Ubuntu › a new force in mobile
  • 3. Il futuro del computing › Ubuntu funziona su smartphone, desktop, server e cloud › Interfaccia veloce e intuitiva per ogni dispositivo › Core Apps di qualità e un ecosistema di app in continua crescita › Ubuntu SDK con supporto nativo e HTML5 › Differenziazione senza frammentazione
  • 4. Spazio agli sviluppatori Ubuntu fornisce tutti gli strumenti necessari allo sviluppo › Ubuntu SDK › Applicazioni native e HTML5 › Portale con documentazione, tutorial e API reference › Linee guida per il design › Processo di upload e pubblicazione app semplice e sicuro › Ubuntu Store › Comunità di sviluppatori e designer attiva e entusiasta
  • 5. Design Un telefono in cui ti puoi rispecchiare › Focus sui contenuti › Interazioni semplici, veloci e naturali › Stile unico
  • 6. Ubuntu User Experience › Spazio ai contenuti › Gestures semplici e intuitive
  • 7. Unity › Unity è la shell di Ubuntu › Per gli utenti, fornisce una semplice e touch-ready
  • 8. La piattaforma Ubuntu › Sistema Operativo Ubuntu, con un layer Android per il device › Unity › Ubuntu SDK fornisce API trasparente per l'accesso ai servizi, device
  • 9. Convergenza › QtQuick › Non solo adattamento nella dimensione dei componenti, design e modi d'uso devono essere ottimizzati › La prima versione LTS a essere completamente convergente sarà la 16.04 › Unity 8, già in uso su smartphone e tablet, rimpiazzerà Unity 7 nella versione desktop
  • 11. Ubuntu SDK › Fornisce tutti gli strumenti per sviluppare app semplicemente › Disponibile per numerosi linguaggi: › QML, linguaggio dichiarativo utile a descrivere l'interfaccia utente di un programma › Javascript › C++ › HTML5
  • 12. QtQuick › Interfacce utente semplici e veloci › Design-oriented › Sviluppo rapido › Il QML è un linguaggio dichiarativo che consente agli oggetti di essere definiti secondo le loro proprietà e di come possono interagire e rispondere ai cambiamenti
  • 13. Componenti › Layouts › Resolution Independence › Localizzazioni › Cloud-ready › Emulatore › Servizi › Command-line parsing
  • 14. Ambiente di sviluppo › Qt Creator › Completo supporto al C++ e QML › Interfaccia grafica per la gestione del dispositivo › Connessione al device tramite SSH (Secure Shell) › Permette l'avvio e l'interruzione di applicazioni durante lo sviluppo › Comprende tool di packaging, convalida e installazione › Cross-compilation direttamente dal desktop › Accesso diretto alla documentazione › Linea di comando
  • 15. Ciclo di vita di una app › Le app sono sospese quando non visibili › Il ciclo di vita di una app è progettato per essere semplice, sicuro e ottimizzare il consumo di batteria
  • 16. Sicurezza › Tutte le app sono confinate grazie ad AppArmor, tramite specifiche restrizioni › AppArmor è un modulo di sicurezza del kernel › Ogni app possiede un profilo AppArmor definito tramite un file di configurazione › Ogni app può solo scrivere nella propria directory › Lo scambio di informazioni tra app è consentito tramite ContentHub
  • 17. Qt/QML e web app › Supporto completo per entrambe le piattaforme di sviluppo › Massime performance con il supporto nativo › Tutte le potenzialità del web grazie alle web app › HTML 5 e CCS 3 › Nessuna modifica richiesta alle webapp già esistenti
  • 18. App native › Scrivere app native per sfruttare tutta la potenza del dispositivo › QML + Javascript + C++ (e Go) › Il Javascript si integra direttamente nel QML › Grazie alle librerie Qt, il C++ non è mai stato così semplice da usare › C++ per il backend come un plugin, QML per il frontend
  • 19. Click packages › I pacchetti Click (.click) sono il nuovo modo in cui sono impacchettate, distribuite e installate le app per Ubuntu Touch e, in futuro, Ubuntu Desktop › Progettati per essere semplici, veloci e sicuri, grazie all'integrazione di AppArmor › Forniscono isolamento tra aggiornamenti del sistema e delle app › Gli aggiornamenti del sistema vengono forniti tramite aggiornamenti OTA (over-the-air) incrementali › Gli aggiornamenti delle app tramite pacchetti click
  • 20. app project › design › develop › publish
  • 21. Installazione › Tramite terminale: › Per Ubuntu 12.04 LTS e 14.04 LTS sudo add-apt-repository ppa:ubuntu-sdk-team/ppa && sudo apt-get update && sudo apt-get dist-upgrade && sudo apt-get install ubuntu-sdk › Per versioni in sviluppo sudo apt-get update && sudo apt-get install ubuntu-sdk
  • 22. Nuovo progetto › Idee › Nuove applicazioni › Porting di Harmattan apps › Remake di app iOS e Android › Tutorial › Disponibili in rete http://developer.ubuntu.com › Design guidelines › http://design.ubuntu.com/apps › Reference › Core Apps
  • 23.
  • 24.
  • 25. › Kit: ambiente con architettura emulata armhf o i386 › Consente la cross-compilation e la cross-configuration di una app
  • 26. › Gestione del device direttamente da QtCreator › Sono forniti anche tool da linea di comando › sudo apt-get install phablet-tools
  • 27. Struttura del QML › Il QML è un linguaggio dichiarativo › Specificare un id serve a rendere il componente accessibile da altre parti nel codice › Esempio: Rectangle { id: canvas width: 200 height: 200 color: "blue" }
  • 28. › Gli oggetti possono essere innestati import QtQuick 2.0 Rectangle { id: rect width: 300 height: 300 color: "orange" Image { id: logo source: "calculator.svg" anchors.centerIn: parent height: rect.height / 2 width: rect.width / 2 } } › Notare come logo acceda alle proprietà di rect
  • 29. Integrazione JavaScript e QML Codice JavaScript può essere integrato con semplicità per fornire controllo sugli elementi e altri benefici Item { width: randomNumber() height: width < 100 ? 100 : (width + 50) / 2 function randomNumber() { return Math.random() * 360; } }
  • 30. MainView › Componente principale per tutte le applicazioni › Aggiunge automaticamente un header, utile alla gestione di Tab e comandi › Ruota automaticamente i contenuti a seconda della rotazione del device › Modulo di Ubuntu.Components › import Ubuntu.Components 1.0
  • 31. main.qml import QtQuick 2.1 import Ubuntu.Components 1.1 import "ui" MainView { objectName: "mainView" applicationName: "com.ubuntu.developer.<devname>.<appname>" Tabs { id: tabs HelloTab { objectName: "helloTab" } WorldTab { objectName: "worldTab" } } }
  • 32. Resolution Independence › L'obiettivo è rendere semplice lo sviluppo di interfacce grafiche scalabili per ogni form factor › Grid Unit (gu) › Density Indipendent Pixel (dp) Device Conversione Comuni schermi (laptop, desktop) 1 gu = 8 px Retina display 1 gu = 16 px Smartphones 1 gu = 18 px Tablet 1 gu = 10 px
  • 33. Nuovi componenti › È utile creare nuovi componenti esternamente per modularizzare la propria applicazione › Molto semplice › È necessario creare un nuovo modulo .qml all'interno del progetto
  • 34. Esempio components/HelloComponent.qml import QtQuick 2.0 import Ubuntu.Components 0.1 UbuntuShape { width: 200 height: width property alias text: myText.text Label { id: myText anchors.centerIn: parent } } main.qml import QtQuick 2.0 import Ubuntu.Components 0.1 import "components" MainView { width: units.gu(48) height: units.gu(60) Page { title: "Example page" HelloComponent { anchors.centerIn: parent text: "Hello world!" } } }
  • 35. Convergenza › Una sola codebase per tutti i dispositivi › Uso efficiente dello spazio dello schermo › Interfacce dinamiche
  • 37. Ubuntu.Layouts › Componente dell'SDK utile a posizionare i vari elementi date certe condizioni › import Ubuntu.Layouts 1.0 › Elementi › Layouts › ItemLayout › ConditionalLayout
  • 38. U1db › Modulo per la gestione di un database basato su JSON objects › Molto semplice da usare › Comodo per salvare impostazioni e informazioni permanentemente con sincronizzazione cross device › import U1db 1.0 as U1db › Policy: networking
  • 39. The Ubuntu dash and scopes architecture › Ricerche veloci attraverso la Dash › Le Scope sono responsabili di fornire alla Dash i risultati di ricerca tramite specifiche categorie
  • 40. Scopes › Finestra su un mondo di contenuti
  • 42. Scope API › API in C++ › Separazione tra Data e View › Personalizzabili › Più visibilità al brand › Giusta importanza ai giusti contenuti
  • 43. Community › Piattaforma di sviluppo › Launchpad – launchpad.net › IRC: › Internazionali: › #ubuntu-touch › #ubuntu-app-devel › Italiani: › #ubuntu-it › #ubuntu-it-dev › Ask › http://askubuntu.com/ › http://chiedi.ubuntu-it.org/ › Facebook › Gruppo ubuntu-it
  • 44. Come collaborare alle Core Apps › Registrarsi a Launchpad › Collegarsi a › https://launchpad.net/ubuntu-phone-coreapps/ › Scegliere un progetto › bzr branch lp:<repo-name> › Hack! › … › Richiedi una Merge Proposal › bzr lp-propose-merge
  • 45. Squash bugs! › Ogni progetto ha un proprio bug tracker ›
  • 47. Contatti Email: giulio.collura@gmail.com Twitter: @gcollura93 Github, Launchpad, IRC: gcollura Le slide saranno disponibili sulla mia pagina web: http://gcollura.github.io/projects Grazie!