Sistemi Operativi

[Android] how to import android contacts in your application

Thursday 17 January 2013, 18:27
federico.serrelli@synaptica.info

A very simple way to search, select and import contact information from your phone (Android Contacts) to your android app is:

1) Send the specific android intent “ACTION_PICK”:

This intent will do for us and “for free” the operation of opening the contacts list and select the contact to import.

2) Simply manage the Intent result by reading the contact information through the resulting Content URI and access to the internal android database (SQLite):

Obviously it’s possible to customize the procedure in order, for example, to import all contacts or to get the list of all names and make a multiple selection before doing the contact import and so on…

Bye

Supportare differenti dimensioni di schermo in android grazie ai Fragments

Friday 12 October 2012, 17:52
federico.serrelli@synaptica.info

Nello sviluppo di applicazioni mobili diventa sempre più importante il supporto di schermi e dimensioni anche molto diverse a causa del diffondersi di modelli e tipologie di dispositivi sempre più disparati.
Per fortuna Android offre una soluzione veramente intelligente e semplice per aiutarci a sviluppare applicazioni che da un lato siano compatibili col maggior numero possibile di dispositivi ma che, dall’altro, si adattino al meglio agli schermi dei dispositivi in termini di usabilità e sfruttamento della superficie disponibile .

La soluzione sono i FRAGMENT.

In realtà i Fragment offrono altri grandi vantaggi come, ad esempio, poter scomporre le Activity in blocchi elementari (una sorta di “sub-activity”) replicabili e riutilizzabili in più layout o schermate applicative.
In questo articolo ci focalizzeremo su un semplicissimo esempio tramite il quale sviluppare un’Activity (che chiameremo MainActivity) in grado di presentarsi all’utente con due fragment affiancati nel caso lo schermo del dispositivo sia abbastanza grande da consentirlo (es. tablet), mentre negli altri casi gli stessi fragment vengono mostrati sequenzialmente (quasi come se fossero due Activity distinte).
L’ipotesi è quella di avere una listView di oggetti nel primo fragment (SxFragment) e il dettaglio dell’oggetto selezionato nel secondo fragment (DxFragment).

La figura seguente mostra l’esempio.

1) Layout
Predisponiamo due differenti layout per schermi piccoli e grandi. La stessa cosa, ad esempio, può essere fatta per Portrait/Landscape, con più fragmen, etc…

file: /res/layout-large/example_layout.xml

file: /res/layout/example_layout.xml

Da notare che nel secondo layout non sono inclusi staticamente i Fragment e che è invece assegnato un id (fgmContainer) al contenitore che ci occorrerà per agganciare i fragment.

2) Activity principale

oppure nel caso di utilizzo della Android Support Library (retrocompatibilità con device che hanno versioni di android < 3.0):

Nel onCreate includiamo il layout e istanziamo dinamicamente il Fragment nel caso in cui siamo alle prese con uno schermo piccolo.

3) Fragment A (items list)
Nel fragment di sinistra, contenente la listView, assegnamo all’evento di selezione (OnItemClick) il compito di notificare la selezione tramite un metodo di callback (onItemSelected) all’attività principale.

4) Activity principale
Aggiungo il metodo di selezione nella MainActivity. Chiaramente il metodo discrimina il caso in cui abbiamo entrambi i fragment da quello in cui occorra istanziare il secondo dinamicamente. Nel primo caso è sufficiente richiamare il metodo di update esposto dal fragment (doItemSelection), mentre nel secondo caso occorre effettuare una transizione dinamica tra i due Fragment. Il primo dei due, viene sostituito tramite “replace”, ma inserito nel Back Stack in modo che premendo il pulsante “Back” non termini l’activity ma venga semplicemente effettuata la transizione al contario e riappaia il primo Fragment.

5) Fragment B (item details)
Il Fragment B, infine, riceve come argomenti i parametri necessari alla sua inizializzazione o, se già inizializzato, espone i metodi necessari all’aggiornamento da parte della MainActivity. Nell’esempio semplicemente l’id dell’item selezionato viene inserito in una TextView.

Nei prossimi articoli vedremo come effettuare la gestione di Menu e Actionbar nel caso di utilizzo dei Fragment.

Ciao e a presto
Federico

Il Cloud di Synaptica sbarca su Android

Tuesday 31 January 2012, 18:51
federico.serrelli@synaptica.info

[lang_it]
Immaginate di essere un agente commerciale che necessita di avere sempre con sé il proprio listino aggiornato e, con esso, immagini e schede tecniche dei propri prodotti.
Immaginate di essere un magazziniere o un negoziante che ha la necessità di aggiornare l’inventario degli articoli presenti in magazzino, di censire una fornitura di nuovi pezzi o, ancora, di preparare un ordine per la spedizione con annessa bolla di accompagnamento e descrizione della ripartizione nei singoli colli.
Oppure immaginate di essere nel vostro showroom e di voler avere sempre a portata di mano, per i clienti interessati, il catalogo dei prodotti non esposti ed, eventualmente, poter direttamente comporre e registrare un ordine, disponendo direttamente l’emissione della relativa fattura o scontrino.
Ancora, immaginate di viaggiare molto per lavoro e voler avere sempre sotto mano l’agenda degli appuntamenti per poter visualizzare, modificare, eliminare appuntamenti o consuntivare i tempi relativamente alle vostre commesse e ai clienti, trovando, poi, questi dati automaticamente integrati nel vostro sistema gestionale.

Se tutto questo non è solamente immaginazione, il Cloud di Synaptica fa per voi!

Ciò è reso possibile da tecnologie all’avanguardia la cui integrazione nel sistema Syna E.R.P. unisce la solidità e l’affidabilità di un sistema centralizzato che espone servizi e utilities via web in sicurezza con la versatilità e mobilità di applicativi client per PC portatili e, soprattutto, smartphone e tablet.

Perché implementare client nativi sui device? Semplice: perché in questo modo è possibile lavorare anche offline, demandando all’applicativo la gestione dell’invio dei dati al cloud non appena la connettività torna disponibile.

I primi applicativi per Android integrati con Syna E.R.P. sono già disponibili, mantenendo però fermo l’obiettivo di sviluppare soluzioni custom in funzione delle possibili esigenze che, in un contesto di mobilità, si moltiplicano quasi all’infinito!

Ecco un semplicissimo video dimostrativo delle potenzialità offerte dal nostro sistema di interfacciarsi al magazzino della propria azienda :

Problema di rete dopo la copia di una virtual machine UBUNTU Server

Friday 3 September 2010, 11:59
marco.brendolini@makeallweb.it

Nel momento in cui si effettua lo start up della copia di una macchina virtuale ubuntu server, VM-WARE  chiede all’utente se la macchina in questione è stata duplicata oppure semplicemente spostata. Questa operazione consente a vmware di generare, una nuova configurazione nella quale è presente un nuovo MAC ADDRESS associato ad una nuova interfaccia di rete “ETHX”.

A questo punto potrebbero presentarsi alcuni problemi con la configurazione di rete del server, in particolare se sul server è stato configurato un IP statico apportando le opportune modifiche al file /etc/network/interfaces”.

Il problema sta nel fatto che, dichiarando a vmware che la macchina è stata duplicata, vengono create nel file: “/etc/udev/rules.d/70-persistent-net.rules” righe di configurazione come di seguito:

# PCI device 0x10de:0x054c (forcedeth) SUBSYSTEM==”net”, DRIVERS==”?*”, ATTRS{address}==”00:00:6c:cf:97:0d”, NAME=”eth0″

# PCI device 0x10de:0x054c (forcedeth) SUBSYSTEM==”net”, DRIVERS==”?*”, ATTRS{address}==”00:00:6c:ed:c4:70″, NAME=”eth1″

Ogni duplicazione della macchina crea una nuova interfaccia di rete ethX.

Ogni interfaccia, con il relativo MAC ADDRESS generato da vmware viene aggiunta nel file sopra citato.

Se l’interfaccia eth attiva non presenta lo stesso mac address della configurazione della macchina virtuale, la rete non funziona correttamente.

SOLUZIONE:

1) Verificare nel file “/etc/network/interfaces” quale interfaccia di rete ethx viene utilizzata dal server

2) Nel file “/etc/udev/rules.d/70-persistent-net.rules” eliminare tutte le righe che non corrispondono all’interfaccia di rete correntemente utilizzata

3) Aggiornare la riga dell’interfaccia corrente con il mac address che potete trovare nel file di configurazione della virtual machine “.vmx” alla voce

ethernet0.generatedAddress = “xx:xx:xx:xx:xx:xx:”

4) Salvate e riavviate la macchina

Il tutto dovrebbe risolversi. Spero di essere stato chiaro, a presto.

Extend swap file on Ubuntu

Saturday 1 May 2010, 16:14
ivan.revelli@synaptica.info

Sometimes happen that you need to extend the swap space on your system, so it happens to me when i tried to install Oracle10ex on my ubuntu system.
So i found the solution on this ubuntu forum : http://ubuntuforums.org/showthread.php?t=89782

To extend the swap file to 1gb :

First, create a large empty file:

Code:

Replace 1000 with the size of the swap file desired, in MB. You can also put the swap_file in a different location if desired.

Next, we’ll secure the swapspace, so ordinary users cannot read the contents (potential security breach):

Code:

Then, turn it into swap space:

Code:

Next, turn it on:

Code:

To make it turn on at every bootup, open up /etc/fstab:

Code:

Add this line to the end of the file:

Code:

I know that this article is only a copy of a forum but only for more simple search and report.

bye

ivan

Backup di Virtual Web Server

Wednesday 17 March 2010, 15:01
marco.brendolini@makeallweb.it

Di questi tempi si parla tanto di virtualizzazione, in particolar modo applicata ai server, così che anche io ho deciso di utilizzare tale tecnologia per l’installazione di un web server.
La configurazione scelta è la seguente:

* Installazione di UBUNTU Server 9.10 minimale come HOST con installazione di VMWARE Server
* Installazione di una macchina virtuale UBUNTU Server 9.10 che chiameremo (IN) in quanto non esposta sul WEB la cui funzione è quella di ospitare i vari database che rimangono per così dire protetti
* Installazione di una macchina virtuale UBUNTU Server 9.10 che chiameremo (OUT) in quanto esposta sul WEB e che ospiterà  i vari servizi WEB

Di seguito cercherò descrivere la procedura da me scelta, per effettuare un backup completo del server; sicuramente esistono metodologie
molto più complesse, efficaci e costose, il merito della procedura da me scelta è il bassissimo costo.

Le operazioni principale sono:

1) Shutdown delle VM
2) Tar delle VM
3) Copia dei TAR su HD esterno con rotazione delle copie di una settimana
4) Allineamento delle VM su di un secondo Web Server
5) Restart delle VM

Provo a descrivere nel dettaglio ogni punto:

Tutte le operazioni sono eseguite da un paio di shell script schedulati per essere eseguiti ogni notte.
Cominciamo con il punto 1, di seguito riporto le istruzioni per lo shutdown delle VM:

vmrun -T server -h https://localhost:8333/sdk -u root -p “password” stop “[standard] serverwebin/Ubuntu.vmx”
vmrun -T server -h https://localhost:8333/sdk -u root -p “password” stop “[standard] serverwebout/Ubuntu.vmx”

Nel punto 2 vengono creati i TAR compressi delle VM impostando la data nel nome del file:

tar czvf /root/backup/vmbackup_date +%d%m%Y.tgz /var/lib/vmware/Virtual\ Machines/

Nel punto 3 viene effettuata la copia del TAR su HD esterno, in particolare le istruzioni che seguono descrivono:

1) inizializzazione dell’hd esterno da parte del sistema operativo
2) copia del TAR compresso sul disco esterno
3) cancellazione del TAR copiato dal disco locale
4) cancellazione dal disco esterno del TAR compresso più vecchio di una settimana
5) disattivazione del disco esterno da parte del sistema operativo

mount /dev/sdc1 /media/hdext
cp /root/backup/vmbackup_date +%d%m%Y.tgz /media/hdext
rm -f /root/backup/vmbackup_date +%d%m%Y.tgz
rm /media/hdext/vmbackup_date -d '7 day ago' +%d%m%Y.tgz
umount /media/hdext

A questo punto la copia delle macchine virtuali è completata occorre quindi riattivarle. L’operazione potrebbe essere eseguita dallo stesso script descritto
precedentemente, tuttavia per il fatto che la mia procedura prevede che le macchine virtuali vengano copiate anche su un secondo server di backup, lo startup dovrà  essere effettuato in un secondo momento.

Nella quarta fase della procedura un secondo server di backup effettua una copia delle macchine virtuali prelevandole dal server principale tramire RSYNC.
Di seguito riporto le istruzioni per la copia RSYNC:

DEST=”/var/lib/vmware/”
rsync -avz –exclude-from=/root/scripts/rsync-exclude –delete xxx.xxx.xxx.xxx::var/var/lib/vmware/Virtual\ Machines $DEST

Al termine della sincronizzazione delle macchine virtuali tramite RSYNC il server secondario effettua lo startup delle stesse sul server principale. Di seguito riporto le istruzioni necessarie:

vmrun -T server -h https://xxx.xxx.xxx.xxx:8333/sdk -u root -p “password” start “[standard] serverwebin/Ubuntu.vmx”
vmrun -T server -h https://xxx.xxx.xxx.xxx:8333/sdk -u root -p “password” start “[standard] serverwebout/Ubuntu.vmx”

L’indirizzo IP è ovviamente quello del server principale.

E’ possibile che il server secondario abbia un qualsiasi problema durante la sincronizzazione delle VM, questo potrebbe impedire lo startup delle stesse sul server principale, per evitare
di avere il server web inattivo, ho deciso di replicare e schedulare lo startup delle VM anche sul server principale in un orario in cui sicuramente la sincronizzazione è già  terminata, se le macchine
sono già  attive, l’istruzione, semplicemente non viene eseguita.

Rimane solo da schedulare i vari scripts tramite crontab.

Alla prossima

Scoprite cosa possiamo fare per il vostro business
I nostri linguaggi