corso di formazione

Sviluppo app per dispositivi mobili con phonegap cordova

Ivrea – settembre 2014 – appunti giornata di formazione #1

Utilizzare la CLI, command line interface.

Installa node.js -> http://nodejs.org/

su mac os e linux

$ sudo npm install -g cordova

su windows

C:\>npm install -g cordova

hello world con cordova

$ cordova create hello com.example.hello HelloWorld

Con questa istruzione abbiamo creato la cartella che conterrà il progetto, assegnato il nome del pacchetto e infine abbiamo assegnato un nome al progetto.

Adesso ci spostiamo all’interno della cartella che contiene il progetto:

cd hello

quindi aggiungiamo le piattaforme di sviluppo, cioè carichiamo nella cartella platforms il codice per i diversi dispositivi mobile:

$ cordova platform add ios
$ cordova platform add amazon
-fireos
$ cordova platform add android
$ cordova platform add blackberry10
$ cordova platform add firefoxos

ovviamente caricheremo solo le piattaforme per cui vogliamo rilasciare la nostra app.

Si possono elencare le piattaforme disponibili per il nostro progetto con il comando

$ cordova platforms ls

Si possono rimuovere le piattaforme non desiderate con il comando

$ cordova platform remove blackberry10
$ cordova platform rm amazon-fireos
$ cordova platform rm android

Facciamo conoscenza col filesystem della nostra app e verifichiamo che la cartella platforms contenga effettivamente una cartella per ogni OS mobile aggiunto.

A questo punto, se disponiamo degli ambienti di sviluppo e degli SDK adatti, possiamo aprire il progetto con i nostri IDE preferiti (XCode, Eclipse, Android Studio, Visual Studio, …) per modificare, compilare e testare il progetto.

Si può comunque utilizzare la CLI, command line interface per compilare e testare il progetto anche senza disporre degli IDE dedicati. Occorre in ogni caso disporre dei Software Development Kit riferiti alle piattaforme per cui vogliamo sviluppare e il compilatore in questione deve essere raggiungibile da riga di comando. Ovvero deve essere indicato nel PATH di sistema (ambiente o utente) il percorso su disco del software di sviluppo, questa operazione si esegue in maniera differente a seconda del sistema operativo disponibile. Non è comunque possibile sviluppare e testare per IOS se non utilizziamo un computer con esegua il sistema operativo Mac OS.

Compiliamo il progetto dando il comando

$ cordova build

In questo caso compiliamo per tutte le piattaforme installate, alternativamente possiamo indicare le piattaforme per cui desideriamo compilare

$ cordova build ios

$ cordova build android

Per vedere il nostro progetto HelloWorld possiamo usare l’emulatore (già installato sul nostro sistema) o collegare il dispositivo e testare il progetto direttamente su di esso

$ cordova emulate android
$ cordova run android

Scuola di karate

programmi di allenamento per mente, corpo e tecnica – [shin gi tai]

Combinazione di gambe e braccia
prima combinazione
  • Aka: Oi-tsuki tsugi ashi gyaku tsuki
  • Shiro: uke-uke-kime
  • Shiro: Mae geri jun tsuki
  • Aka: uke-uke-kime

seconda combinazione

  • Aka: Mae geri jun tsuki
  • Shiro: uke-uke-kime
  • Shiro: Mawashi tsugi ashi gyaku tsuki
  • Aka: uke-uke-kime

terza combinazione

  • Aka: Kizami tsuki tsugi ashi gyaku tsuki
  • Shiro: uke-uke-kime
  • Shiro: Ushiro geri iori ashi uraken uchi
  • Aka: schiva schiva
  • Aka: Ashi barai jun tsuki tsugi ashi gyaku tsuki

sequenza di allenamento

Allenamento di tecniche e combinazioni per il combattimento: eseguire partendo da kamae sinistro, poi cambio guardia, poi cambio iniziativa
praticare il karate tradizionale shotokan

Qui puoi trovare gli orari e le sedi dei corsi dell’a.s.d. ITAI DOSHIN diretta dal M° Franco Stizzoli

Related Images:

articolo originale:
HOW TO merge couple of pdf into one

Scarica pdftk. in ubuntu apri un terminale e digita:

sudo apt-get install pdftk

Ora accedi alla dir che contiene i file pdf da concatenare e digita:

pdftk 1.pdf 2.pdf 3.pdf cat output merged.pdf

per concatenarli tutti in ordine alfabetico:

pdftk *.pdf cat output merged.pdf

Ecco altri esempi di utilizzo di pdftk:

(crea alias):
 pdftk A=1.pdf B=2.pdf cat A B output 12.pdf
Estrai pagine selezionate e combinale in un nuovo pdf:
 pdftk A=one.pdf B=two.pdf cat A1-7 B1-5 A8 output combined.pdf
Codifica a  128-Bit 
 pdftk mydoc.pdf output mydoc.128.pdf owner_pw foopass
Codifica e richiedi la pw per l'apertura
 pdftk mydoc.pdf output mydoc.128.pdf owner_pw foo user_pw baz
Permetti la stampa del file, una volta aperto:
 pdftk mydoc.pdf output mydoc.128.pdf owner_pw foo user_pw baz allow printing
Decritta un PDF
 pdftk secured.pdf input_pw foopass output unsecured.pdf
Unisci due file di cui uno crittato:
 pdftk A=secured.pdf mydoc.pdf input_pw A=foopass cat output combined.pdf
Decomprimi il pdf
 pdftk mydoc.pdf output mydoc.clear.pdf uncompress
Cerca di riparare un PDF:
 pdftk broken.pdf output fixed.pdf
Separa un PDF  in pagine singole
 pdftk mydoc.pdf burst
Crea un file report dei Metadata e altre info di un PDF
 pdftk mydoc.pdf dump_data output report.txt

android intent action list

elenco principali azioni in android

azioni principali:

  • ACTION_MAIN
  • ACTION_VIEW
  • ACTION_ATTACH_DATA
  • ACTION_EDIT
  • ACTION_PICK
  • ACTION_CHOOSER
  • ACTION_GET_CONTENT
  • ACTION_WEB_SEARCH
  • ACTION_DIAL
  • ACTION_CALL
  • ACTION_SEND
  • ACTION_FACTORY_TEST
  • ACTION_SENDTO
  • ACTION_ANSWER
  • ACTION_INSERT
  • ACTION_DELETE
  • ACTION_RUN
  • ACTION_SYNC
  • ACTION_PICK_ACTIVITY
  • ACTION_SEARCH

richiama le azioni dal codice java – esempi

mostra una pagina web:

	Uri uri = Uri.parse("http://www.bogliaccino.it");
 Intent it  = new Intent(Intent.ACTION_VIEW,uri);
 startActivity(it);

//mostra una mappa centrata sulle coordinate GPS (engim artigianelli torino)

Uri uri = Uri.parse("geo:45.0728629,7.6714303");
Intent it = new Intent(Intent.Action_VIEW,uri);
startActivity(it);

//mostra un percorso

Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");
Intent it = new Intent(Intent.ACTION_VIEW,uri);
startActivity(it);

//chiamata telefonica

Uri uri = Uri.parse("tel:xxxxxx");
Intent it = new Intent(Intent.ACTION_DIAL, uri);
startActivity(it);
Uri uri = Uri.parse("tel.xxxxxx");
Intent it =new Intent(Intent.ACTION_CALL,uri);

//aggiungi i permessi nel manifest: uses-permission id=”android.permission.CALL_PHONE”

//inviasms/mms, call sender program

Intent it = new Intent(Intent.ACTION_VIEW);
it.putExtra("sms_body", "The SMS text");
it.setType("vnd.android-dir/mms-sms");
startActivity(it);

//send sms

Uri uri = Uri.parse("smsto:0800000123");
Intent it = new Intent(Intent.ACTION_SENDTO, uri);
it.putExtra("sms_body", "The SMS text");
startActivity(it);

//invia mms

Uri uri = Uri.parse("content://media/external/images/media/23");
Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra("sms_body", "some text");
it.putExtra(Intent.EXTRA_STREAM, uri);
it.setType("image/png");
startActivity(it);

//invia email

Uri uri = Uri.parse("mailto:xxx@abc.com");
Intent it = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(it);
Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");
it.putExtra(Intent.EXTRA_TEXT, "The email body text");
it.setType("text/plain");
startActivity(Intent.createChooser(it, "Choose Email Client"));
Intent it=new Intent(Intent.ACTION_SEND);
String[] tos={"me@abc.com"};
String[] ccs={"you@abc.com"};
it.putExtra(Intent.EXTRA_EMAIL, tos);
it.putExtra(Intent.EXTRA_CC, ccs);
it.putExtra(Intent.EXTRA_TEXT, "The email body text");
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
it.setType("message/rfc822");
startActivity(Intent.createChooser(it, "Choose Email Client"));

//aggiungi extra

Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");
sendIntent.setType("audio/mp3");
startActivity(Intent.createChooser(it, "Choose Email Client"));

//play media

Intent it = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse("file:///sdcard/song.mp3");
it.setDataAndType(uri, "audio/mp3");
startActivity(it);
Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);

//Uninstall

Uri uri = Uri.fromParts("package", strPackageName, null);
Intent it = new Intent(Intent.ACTION_DELETE, uri);
startActivity(it);

//uninstall apk

Uri uninstallUri = Uri.fromParts("package", "xxx", null);
returnIt = new Intent(Intent.ACTION_DELETE, uninstallUri);

//install apk

Uri installUri = Uri.fromParts("package", "xxx", null);
returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);

//play audio

Uri playUri = Uri.parse("file:///sdcard/download/everything.mp3");
returnIt = new Intent(Intent.ACTION_VIEW, playUri);

//invia extra

Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");
it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/eoe.mp3");
sendIntent.setType("audio/mp3");
startActivity(Intent.createChooser(it, "Choose Email Client"));

//search
//where pkg_name is the full package path for an application

Uri uri = Uri.parse("market://search?q=pname:pkg_name");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);

//show program detail page
//app_id è l’application ID sul Market

Uri uri = Uri.parse("market://details?id=app_id");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);

//cerca con google – search google

Intent intent = new Intent();
intent.setAction(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY,"searchString")
startActivity(intent);

Corso Java Base

Java Collection Framework

snippet code

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
public class List {
	public static void main (String[] args) {

	 //primo array
	 String[] moto = 
	 { 
	 "Moto Guzzi V35 Imola", 
	 "Yamaha Tenerè XTZ 600", 
	 "Yamaha XT600", 
	 "BMW K100RS", 
	 "BMW R1150GS" };

	 //stampo primo array
	 System.out.println("Primo array");
	 for (String x: moto)
	 System.out.println(x);

	//istanzio un oggetto di tipo list
	 List<String> lista1 = new ArrayList<String>();

	 //aggiungo a lista1 gli elementi di primo array: metodo add();
	 for(String x: moto)
	 lista1.add(x);

	 //secondo array
	 String[] motoVorrei = 
	 { "Suzuki GSR750", "Tenerè XTZ 600", "Honda NC750X" };
	 
	 //stampo primo array
	 System.out.println("Secondo array");
	 for (String z: motoVorrei)
	 System.out.println(z);

	 //nuovo oggetto di tipo list
	 List<String> lista2 = new ArrayList<String>();

	 System.out.println("Aggiungo elementi a lista 2");

	 //add per aggiungere elementi 
	 for(String y: motoVorrei)
	 lista2.add(y);

	 System.out.println("Stampo elementi a lista 2 usendo il metodo size() e get()");
	 //get per conoscere il valore dell'i-esimo elemento, size() metodo che restituisce la dimensione dell'oggetto
	 for (int i = 0; i<lista2.size();i++){
	 System.out.printf("%s \n", lista2.get(i));
	 }

	 System.out.println("Poi aggiungo lista2 a lista1 metodo addAll");

	 //addAll() : metodo per aggiungere tutti i valori dell'oggetto lista2 all'oggetto lista1
	 lista1.addAll(lista2);
	 System.out.println("Stampo la nuova Lista1"); 

	 for (int i = 0; i<lista1.size();i++){
	 System.out.printf("%s \n", lista1.get(i));
	 } 

	 System.out.println("Lista1 modificata con tutti i valori di lista2 aggiunti"); 

	 //
	 for (int i = 0; i<lista1.size();i++){
	 System.out.printf("%s %s \n", i, lista1.get(i));
	 }

	 System.out.println("Lista2 è rimasta uguale: "); 
	 //lista2=null;
	 for (int i = 0; i<lista2.size();i++){
	 System.out.printf("%s \t", lista2.get(i));
	 }

	 //metodo editlist
	 editlist(lista1,lista2);
	 System.out.println("confronto le stringhe e le modifico col metodo editlist"); 
	 for (int i = 0; i<lista1.size();i++){
	 System.out.printf("%s %s \n", i, lista1.get(i));
	 } 

	 }

	private static void editlist(Collection<String> lista1, Collection<String> lista2) {
	 Iterator<String> it = lista1.iterator();
		 while (it.hasNext()){
		 if (lista2.contains(it.next()))
		 it.remove();
		 }
	 }
}

/** JCF: alcuni metodi collection e interfaccia Iterator */

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class ListEstesa {

	public static void main(String[] args) {

		// primo array
		String[] moto = { "1Guzzi V35 Imola", "2Tenerè XTZ 600", "3XT600",
				"4BMW K100", "5BMW R1150 GS" };
		// secondo array
		String[] motoVorrei = { "6Suzuki GSR750", "7Tenerè XTZ 600",
				"8Honda NC750X" };

		// istanzio oggetto di tipo list
		List<String> lista1 = new ArrayList<String>();
		// nuovo oggetto di tipo list
		List<String> lista2 = new ArrayList<String>();

		// aggiungo elementi del primo array a lista1: metodo add();
		for (String x : moto)
			lista1.add(x);

		// uso add per aggiungere elementi a lista 2
		for (String x : moto)
			lista2.add(x);
		printme(lista1);
		// addAll() : metodo per aggiungere tutti i valori dell'oggetto lista2
		// all'oggetto lista1
		lista1.addAll(lista2);

		printme(lista1);
		rimuoviDaLista(lista1, 3, 5);
		printme(lista1);
		reverseLista(lista1);

	}

	// stampare i valori
	private static void printme(List<String> l) {
		System.out.println("metodo printme");
		for (String a : l)
			System.out.printf("%s \n", a);
		System.out.println();
	}

	// rimuovere elementi
	private static void rimuoviDaLista(List<String> l, int from, int to) {
		System.out.println("metodo rimuovi");
		l.subList(from, to).clear();
	}

	// reverse list
	private static void reverseLista(List<String> l) {
		System.out.println("metodo reverse");
		ListIterator<String> lista = l.listIterator(l.size());
		while (lista.hasPrevious())
			System.out.printf("%s \n", lista.previous());
	}

}

/** JCF: convertire list in array e viceversa */

import java.util.Arrays;
import java.util.LinkedList;
public class Main {
	public static void main (String[] args) {

		 String[] film = { "Pulp Fiction", "Le iene", "Kill Bill" };
		 LinkedList<String> thelist = new LinkedList<String>(Arrays.asList(film));

		 thelist.add("Django Unchained");
		 thelist.addFirst("Jackie Brown");

		 //riconverti ad array
		 film = thelist.toArray(new String[thelist.size()]);

		 for (String x: film)
		 System.out.printf("%s \n", x);

	} 

}
/** JCF: collections metodi sort() e overload con reverseOrder() */

import java.util.Arrays;
import java.util.Collections;
import java.util.List;


public class Main {

	  public static void main (String[] args) {

		  
		  String[] film = { "Pulp Fiction", "Le iene", "Kill Bill" };
		  List<String> lista1 = Arrays.asList(film);
		  
		  //ordina coi metodi collections
		  Collections.sort(lista1);
		  
		  for (String x: lista1)
			  System.out.printf("%s \n", x);

		  //overload del metodo, 2 parametri
		  //ordina coi metodi collections
		  Collections.sort(lista1, Collections.reverseOrder());
		  
		  for (String x: lista1)
			  System.out.printf("%s \n", x);
	  }	  
	  
}

Corso Java Base

Appunti del corso Java Base – Introduzione alla programmazione a oggetti
Torino, marso-maggio 2014, Pier della Francesca, Corso di formazione aziendale
Come testo principale abbiamo adottato il Manuale di Java 7, di Claudio De Sio Cesari, edito da Hoepli

Programma del corso

Argomenti

1. Introduzione a Java

  • Introduzione
  • Compilazione ed esecuzione
  • 2. Sintassi e programmazione strutturata
  • variabili e metodi
  • tipi di dati, array
  • operatori di controllo flusso

3. Sintassi e programmazione OO

  • Object Oriented fondamenti
  • Ereditarieta, Incapsulamento, Polimorfismo
  • sintassi e pratica OO
  • 4. Accesso database
  • ·          accesso a DB via JDBC
  • ·          Object Relation Mapping
  • 5. Eccezioni
  • ·          Classe Exception
  • ·          Try e catch
  • ·          Generazione di eccezioni
  • ·          Creazione di nuove eccezioni

6. Core libraries

  • collezioni e iteratori
  • input/output
  • gestione delle date, numeri complessi e formattazione
  • networking di base

Unità didattiche

Introduzione 8 4

  • 1 Introduzione
  • 2 Installazione ambiente di sviluppo
  • 3 Introduzione linguaggio Java
  • 4 Compilazione ed esecuzione
  • Compilazione ed esecuzione 8 4
  • 5 Sintassi java
  • 6 Basi della programmazione

variabili e metodi 12 4

  • 9 Operatori di assegnazione, relazionali e booleani
  • 10 Operatori aritmetici
  • 11 Pre/post incremento e concatenazione stringhe
  • 12 Variabili locali
  • Metodi
  • Il metodo Main ed i sottoprogrammi
  • Metodi di classe: La parola chiave Static
  • Passaggio dei parametri per riferimento e per valore
  • Modificatori
  • Gestione e importazione dei package

tipi di dati, array 12 4

  • 13 Scope delle variabili
  • 14 Tipi di dato primitivi
  • 15 Caso particolare: la classe String
  • 16 Casting
  • Input/Output utente
  • Array monodimensionali
  • Array multidimensionali

operatori di controllo flusso 16 8

  • 17 Istruzione If-Else e operatore ternario
  • 18 IF annidati
  • 19 Istruzione Switch – case
  • 20 Ciclo While
  • 21 Ciclo Do-While
  • 22 Ciclo For
  • 23 Cicli annidati
  • 24 Cicli infiniti

Object Oriented fondamenti 16 8

  • 25 Labels, Break e Continue
  • 26 Programmazione ad oggetti
  • 27 La programmazione ad oggetti
  • 28 Progettare una Classe
  • 29 Istanziare un Oggetto: il costruttore
  • 30 Variabili d’istanza e incapsulamento
  • 31 Visibilità dei membri di una classe
  • 32 Il reference This
  • Ereditarieta, Incapsulamento, Polimorfismo 12 4
  • 33 La parola riservata null
  • 34 Ereditarietà
  • 35 Il concetto di ereditarietà
  • 36 Strutture ereditarie

Dalla teoria alla pratica: Ereditarietà

  • La parola riservata super
  • La classe Object
  • Impedire l’ereditarietà: la parola riservata final
  • sintassi e pratica OO 8 4
  • 37 Membri statici e membri dinamici
  • 38 Polimorfismo
  • 39 Overloading e Overriding
  • 40 Binding dinamico
  • Casting con oggetti
  • Cast e instanceof
  • Interfacce, classi astratte e classi innestate
  • Interfacce
  • Ereditarietà e polimorfismo nelle interfacce
  • Classi astratte
  • Classi innestate
  • Classi anonime

accesso a DB via JDBC 16 8

  • 41 Introduzione a JDBC
  • 42 Convenzioni JDBC URL Naming
  • 43 Gestione dei driver: il DriverManager
  • 44 Gestione degli errori
  • 45 Le SQLException
  • 46 Supporto per i tipi di dati
  • 47 Estensioni standard di JDBC
  • 48 Connection Pooling
  • Object Relation Mapping 8 4
  • 49 Gestione dei dati: JDBC
  • 50 DB

Classe Exception 8 4

  • 53 Eccezioni
  • 54 Errori ed eccezioni
  • 55 Il costrutto TRY-CATCH-FINALLY
  • 56 Tipi di eccezione ed il costrutto Throws
  • Try e catch 12 4
  • 57 Lanciare un’eccezione: il costrutto Throw
  • 58 Eccezioni personalizzate
  • Generazione di eccezioni 8 4
  • Creazione di nuove eccezioni 8 4

collezioni e iteratori 8 4

  • 69 Il Framework Collections
  • 70 Framework Collections
  • 71 Foreach ed Iterator
  • 72 Implementazioni di Set e SortedSet
  • input/output 12 4
  • 73 Implementazioni di List
  • 74 Implementazioni di Queue
  • 75 Implementazioni di Map e SortedMap
  • 76 Tipi Generics

gestione delle date, numeri complessi e formattazione 8 4

  • 77 Input/Output
  • 78 Introduzione all’I/O: input da tastiera
  • 79 Java.io: Leggere un file
  • 80 Java.io: Scrivere su un file
  • networking di base 8 4
  • 81 Java.io:Operazioni su file
  • 82 Networking: Socket

Programma corso android 2014

Ambiente di sviluppo Android
Struttura di un progetto Android
Componenti di un’applicazione Android
Sviluppo di una semplice applicazione Android

  • HelloAndroid
  • LanciaMoneta
  • LanciaDadi

Interfaccia utente in Android

Interfaccia utente in Android: Layouts
Interfaccia utente in Android: Controlli base
Interfaccia utente in Android: Controlli di selezione
Interfaccia utente in Android: Controlli personalizzati

Interfaccia utente in Android: Fragments
Interfaccia utente in Android: ActionBar
Interfaccia utente in Android: Navigation Drawer

Menu in Android

Menu in Android (I): Menu e Submenu base
Menu in Android (II): Menu Context
Menu in Android (III): Opzioni avanzate

Widgets in Android

Interfaccia utente in Android: Widgets

Gestione di Preferenze in Android

Preferenze in Android I: SharedPreferences
Preferenze in Android II: PreferenceActivity

Basi di Dati in Android

Basi di dati in Android (I): Primi passi con SQLite
Basi di dati in Android (II): Insert, update e delete record
Basi di dati in Android (III): select record

File in Android

File in Android (I): Memoria Interna
File in Android (II): Memoria Esterna (SD Card)

Trattamento di XML in Android

Trattamento di XML in Android (I): SAX
Trattamento di XML in Android (II): DOM
Trattamento di XML in Android (III): XmlPull
Alternative per leggere e scrivere XML in Android

Localizzazione Geografica in Android

Localizzazione geografica in Android

Mappe in Android

Mappe in Android (Google Maps Android API v2)

Content Providers in Android

Content Providers in Android (I): Costruzione
Content Providers in Android (II): Utilizzo

Notifiche in Android

Notifiche in Android (I): Toast
Notifiche in Android (II): Barra di stato
Notifiche in Android (III): Dialogs

Accesso a Servizi Web in Android

Servizi Web SOAP in Android
Servizi Web REST in Android (approfondimento su stackoverflow)

Processi in background in Android

Processi in background I: Thread e AsyncTask
Processi in background II: IntentService

Debug di applicazioni in Android

Debug in Android: Logging

Approfondimenti

Google Play Services

Notifiche Push in Android – Google Cloud Messaging (GCM / C2DM)

Implementazione del Server

Implementazione del Client Android

Integrazione con Google+

Sessione Google+ (Sign-In)

Profilo e cerchie

 

Sedi corsi 2014

Febbraio-giugno 2014 – Engim Artigianelli Torino – MDL – Corso di specializzazione

Aprile-giugno 2014 – Fondazione ITS – Percorsi di Istruzione Tecnico Superiore post-diploma

Maggio-giugno 2014 – Divitech Leinì, Tierra Leinì – PFA – Corsi di Formazione Aziendale

p5rn7vb