Blupixel IT Blog – Articoli e Tutorial Informatica e Programmazione

Blog ufficiale di Blupixel IT Srl

Trasformare un testo in una tabella in Android SDK

In Android la gestione della visualizzazione dei testi può essere molto complessa.

Per visualizzare un testo in maniera ordinata, come fosse una tabella, ad esempio, è necessario creare un layout appositamente, con un elemento per ogni cella che si vuole compilare e poi caricare i dati una cella alla volta aggiungendo inoltre un elemento alla view.

Se avessi, però, solo un testo normale in una TextView e volessi renderlo ben allineato su ogni riga in modo che sembri una tabella, puoi usare questo trucco, che sfrutta il calcolo della dimensione delle scritte, per aggiungere tanti spazi quanti necessari per identare correttamente le parti del testo

String lines[] = getItem(position).toString().split("\n");
String print = "";
String parts[] = null;
String tmp = "";
int weight = 0;
for (int i=0; i < lines.length; i++) {
   if (!lines[i].equalsIgnoreCase("")) {
	   parts = lines[i].split(":", 2);
	   tmp = "";
	   Paint textPaint = text.getPaint();
	   float width = textPaint.measureText(parts[0]);
	   float wslength = textPaint.measureText(" ");
	   for (int j = 0; j < (220 - Math.round(width))/Math.round(wslength); j++) {
		   tmp = tmp + " ";
	   }
	   if (print.equalsIgnoreCase("")) {
		   print = print + parts[0] + tmp + Html.fromHtml(""+parts[1]+"");
	   } else {
		   print = print + "\n" + parts[0] + tmp + parts[1];
	   }
   }
}

Nella prima parte separo una stringa in linee separandola sugli a capo, dopo ciclo su ogni riga e se la riga non è vuota creo la riga in versione tabellare.

Separo ogni riga in “celle” dividendo il testo ogni volta che incontro il carattere “:” (in questo caso prevedo 2 celle), quindi prendo la lunghezza visualizzata del testo e aggiungo tanti spazi bianchi quanti ne sono necessari per arrivare ad una lunghezza di 220.

Se prevedete più di due celle dovrete ripetere l’operazione per tutte le celle (ultima esclusa)

Se è la parima riga, la metto in grassetto, come fosse un header.

Così sarà possibile inserire la variabile print in qualunque TextView o AlertDialog, ottenendo un testo con effetto tabella.

Buon lavoro

Lanciare una seconda istanza di skype su Ubuntu Linux

A volte potrebbe essere necessario avere sullo stesso computer due istanze di Skype contemporaneamente.

Di seguito i passaggi per farlo su un generico sistema Linux e quindi per mettere l’icona della seconda istanza sulla launchbar di ubuntu.

Prima cosa bisogna creare una nuova cartella Skype nella propria home

mkdir ~/.personalSkype

Quindi conviene duplicare l’esecutivo skype per permettere al sistema di collegare correttamente le finestre all’istanza giusta:

sudo ln -s /usr/bin/skype /usr/bin/skype2nd

Adesso si potrà lanciare la seconda istanza di skype con il comando

skype2nd --dbpath=~/.personalSkype

 

Per creare un’icona nella barra sinistra di Ubuntu seguire i seguenti passaggi:

1. Creare una nuova icona per skype (ad esempio la S verde), chiamarla skype-personal.png (o altro nome se preferite, ma dovrete modificare il prossimo file) e salvarla nella cartella /usr/share/icons/hicolor/64×64/apps/ (saranno necessari i privilegi di root)

2. Creare un file chiamato SkypePersonal.desktop nella cartella /usr/share/applications con il seguente contenuto

#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Icon=skype-personal
Name=Skype 2nd
Exec=skype2nd --dbpath=~/.personalSkype
Name=Skype 2nd
Icon=skype-personal

3. Aprire la cartella /usr/share/applications  nel File Manager e trascinare il nuovo file creato sulla barra a sinistra (launchbar)

Adesso per poter lanciare la seconda istanza sarà sufficiente cliccare sull’icona appena trascinata.

 

Selezionare doppioni e duplicati in PostgreSQL mediante l’utilizzo di una query con opzione EXCEPT e DISTINCT ON

PostgreSQL permette l’utilizzo dell’utilissima funzione DISTINCT per selezionare le righe differenti rispetto ad un campo.
Ma come fare per selezionare le righe uguali indipendentemente dalla conoscenza del contenuto del campo?

Vediamo una soluzione:

Supponiamo di avere una tabella anagrafica con persone iscritte più volte utilizzando ad esempio lo stesso numero di telefono.

Vogliamo sapere quali sono le persone duplicate attraverso la conoscenza di questa unica condizione: Le persone duplicate nel databse hanno lo stesso numero di telefono nel campo telefono_1

A questo punto, volessimo selezionare solo le righe senza doppioni nel numero di telefono potremmo semplicemente eseguire la query:

SELECT DISTINCT ON (telefono_1) * FROM anagrafica

In questo modo selezioneremmo dalla tabella anagrafica tutti i campi di tutte le righe i cui numeri di telefono sono diversi.

Volendo invece prendere tutti i campi di tutte le righe con lo stesso numero di telefono dovremo fare:

SELECT * FROM anagrafica EXCEPT SELECT DISTINCT ON (telefono_1) * FROM anagrafica

Con questo comando, infatti, selezioneremo tutte le righe dell’anagrafica ESCLUDENDO (EXCEPT) quelle che contengono numeri di telefono distinti. Quindi selezioneremo solo i doppioni!

Decidendo un ordinamento con l’aggiunta di “ORDER BY …” potremo anche decidere se selezionare come doppione il primo inserito oppure l’ultimo

Alla prossima