Sistemi Operativi

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

Delphi XE2 & Firemonkey some answers….

Sunday 7 August 2011, 18:01
ivan.revelli@synaptica.info

In questi giorni c’è un’eccezionale attività relativa a quest’argomento sulla rete, la mia curiosità di provare questo prodotto non posso negarlo è molta. Parte del mistero relativo a FireMonkey si è risolto da voci ufficiali si tratterebbe dell’acquisto di VGScene/DXScene da parte di Embarcadero.
Per quanto mi riguarda rimaneva comuque il desiderio di capire come questa tecnologia potesse essere integrata in Delphi XE2 ed ho trovato in rete i seguenti video che ne dimostrano potenzialità e semplicità d’uso che davvero non mi aspettavo. Credo che questa versione di Delphi sia adirittura più rivoluzionaria di Delphi 2.
Inoltre non mi aspettavo l’integrazione con iOS e X-Code cosa di cui non si era minimamente accennato in passato.

Questo primo video mostra come creare da zero un app. Nativa per Mac con Delphi e FireMonkey e come sia semplice compilarla per i due ambienti :



Mentre questo secondo video (ufficiale dal blog di Embarcadero) mostra come sia possibile creare la stessa applicazione per Win32, Win64, OSX e tramite l’esportazione da Delphi a XCode agli ambienti iOS (iPhone , iPAD) :



Leggendo qua e la ho letto anche che stanno lavorando per aggiungere le piattaforme Linux e Android a questa fantastica tecnologia. Qui ovviamente in merito ad Android mi sorgono altre perplessità (tipo che in Android in teoria si può esclusivamente sviluppare in Java e soprattutto non con linguaggi nativi… ma stiamo a vedere)

In queto articolo pubblicato sul sito di Embarcadero , David Intersimone ed altri dello staff rispondono a molti questi proposti dai lettori e se ne traggono infomrazioni preziose in merito al prodotto e a eventuali limiti dello stesso, il link all’articolo : http://blogs.embarcadero.com/davidi/2011/08/01/41062#comment-26065

a presto
ivan

http://www.delphiformac.com

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

HowTo- Installing Open Office 3.0 on Ubuntu 64 8.10

Tuesday 28 July 2009, 8:55
ivan.revelli@synaptica.info

Now i’m on updating my 64bit ubuntu system with new OO 3.0. HowTo do this i found a good tutorial here.

hope is good for you
bye
ivan

Scoprite cosa possiamo fare per il vostro business
I nostri linguaggi