sabato 6 giugno 2015

Stamina, l'anti-scienza e la falsa speranza

Ieri una sentenza della cassazione ha posto un'altra pietra tombale sul trattamento Stamina.

Avendo seguito la vicenda stamina posso concludere che è stata una sofferta vittoria sulla ragione, ma vi è il forte rammarico che un sacco di persone, in buona fede o meno, continuano a credere che sia un complotto di Big Pharma per impedire alle persone di curarsi. Non si contano gli insulti, le accuse e la diffamazione che hanno subito medici e il ministero della sanità. Parole e gesti di cui nessuno chiederà scusa affermando di aver esagerato e che la prossima volta "sentirà un medico, e non un professore di lettere, per una proposta di cura seria".

La vicenda parte dal 2009, quando Vannoni e due soci iniziano a sviluppare e proporre tale trattamento tramite la società Re-gene Srl. Tale sperimentazione, poco dopo, viene subito sottoposta ad indagine della procura di Milano, indagine seguita dal Pm Raffaele Guariniello. Nel 2011 vengono eseguiti degli arresti e partono gli interrogatori (qui articolo de "La Stampa"). Dal 2011 l'indagine va avanti, fino al rinvio a giudizio di Vannoni e soci nel 2012. Tutto sembrerebbe poter finire come molte cure alternative e fasulle che ammorbano il panorama medico, ma successe qualcosa di inaspettato, se non si fosse in Italia: qualcuno fiuta l'argomento e decide che è il caso di farci soldi. Soldi ottenuti sfruttando il dolore delle persone (questo è successo, non è un'accusa di malafede). Ecco che nel 2013 un argomento che doveva rimanere all'interno delle aule dei tribunali arriva a livello nazionale a causa di grazie ad un servizio delle iene.

Da quel momento la vicenda è stata ripresa da praticamente tutti i media. Chi più possibilista, chi si limitava a riportare le due campane (o meglio una sola), con le iene che hanno sfornato ulteriori servizi. Dopo mesi di insulti e accuse e con il ministero che ha bloccato un finanziamento inizialmente concesso alla Stamina foundation si arrivò ad una totale bocciatura della prima commissione istituita dal ministero della sanità. Tale commissione fu ritenuta non idonea dal tribunale del Lazio, con una sentenza che fa acqua da tutte le parti (visionare in particolare pagina 6 e 7 dove prima si afferma che Vannoni ha ben specificato di non voler modificare il metodo, ma che la commissione fa presente che o viene modificato o la sperimentazione non può partire e che doveva (la commissione!!!) discutere con Vannoni stesso delle modifiche, come se la commissione lavorasse per lui).
Dopo un po' un secondo comitato è arrivato alla medesima conclusione del primo: il presunto metodo non funziona, non ci sono prove che funzioni o che abbia mai funzionato.
Nel 2015 Vannoni patteggiò un anno e 10 mesi, previa sospensione della commercializzazione del trattamento.


Non racconterò i dettagli medici, il blog MedBunker, gestito da un medico, contiene svariati articoli precisi e chiari sulla vicenda, a me interessa segnalare i dettagli che possono capire le persone con una cultura media, ragionamenti che si dovrebbero applicare in quanto dotati di ragione.

La prima cosa che penso in queste vicende è che il lato mediatico non ci dovrebbe essere, punto e basta. Se qualcuno vuole denunciare un'improbabile complotto, non dovrebbe concentrarsi sulle emozioni umane, sull'ancor più ipotetica freddezza della sanità e dei medici, ma dovrebbe prendere i documenti e sentire i testimoni dei fatti, togliendo, il più possibile, le emozioni umane. D'altro canto si tratta di presentare in modo corretto una situazione, la differenza tra "negata cura sperimentale ad una bambina che ha tanta voglia di vivere e soffre per questo" e "somministrata cura non testata a bambina inerme e sofferente" è abissale, eppure è la stessa identica cosa. Questo basta a considerare tutti i servizi delle iene come spazzatura, perché non si parla di fatti o di rilievi oggettivi, si parla di sentimenti, di sensazioni (nessun miglioramento certificato, solo un "mi sento meglio" e via così). Questo non è giornalismo, è show! Altra perla delle iene è il non aver indagato su Vannoni, che ne facevano, già allora, una persona decisamente non autorevole, considerato che non è nemmeno un medico, ma un laureato in scienze della comunicazione.

La seconda cosa è la ragione. Mettiamo che ci sia questa ipotetica cura: perché tale cura, apparentemente miracolosa, non ha alcun dato oggettivo a suo sostegno? Gli unici "dati" sono le testimonianze dei malati e dei loro parenti diretti, ma sono sufficienti? No, non lo sono, perché in una tale situazione, difficile da immaginare, ogni gesto può essere inteso dai presenti come un miglioramento o un peggioramento. Ci vogliono dei test e un medico che certifichi questi miglioramenti. In tutta questa vicenda non è mai stata presentata una prova oggettiva, solo testimonianze toccanti. La scienza e la medicina non funzionano così. Qualunque scoperta medica, dalla più piccola, alla più grande (antipolio, penicillina) ha sempre avuto una caratteristica: prove oggettive e ripetibili. D'altro canto, come si potrebbe capire se un medicinale funziona o se è l'allineamento delle stelle? Con il tempo i protocolli si sono evoluti, ma a titolo d'esempio basti sapere che il vaccino Salk dopo i test di laboratorio cominciò un periodo di test nel 1953 che si concluse solo nel 1955. Due anni di test, documentati e massicci. Ci fu anche un incidente, ma ciò non squalificò il vaccino. Questa è la differenza tra una cura che funziona e una millantata speranza. La prima segue rigorosi protocolli che ne certificano l'efficacia, la seconda è urlata in piazza.

La terza è l'egoismo. Molti contestarono che si toglie anche la speranza ai malati e ciò non è giusto. Se i soldi fossero infiniti il problema non sussisterebbe, ma i soldi sono limitati, di questi tempi anche di più. Assegnare un finanziamento a stamina avrebbe significato toglierli da altre parti. È giusto che un paziente non possa accedere all'ospedale perché i posti letto sono finiti? È giusto che un malato cronico debba pagare di più le sue medicine perché sono stati concessi finanziamenti a soggetti che promettono e non mantengono? No, non è giusto, ma chi protesta non lo considera minimamente. Questo è egoismo nella sua forma più pura, alla faccia del volere il bene dei malati. Non posso tollerare quest'ultimo aspetto, perché se le situazioni coinvolte sono molto gravi, ciò non vuol dire che si abbia il diritto di affermare quello che si vuole e fare ciò che pare. Gli insulti al ministero della sanità e ai medici sono innumerevoli e tutt'ora non hanno chiesto scusa. Una persona ragionevole e con una cultura media non deve cadere in queste trappole e se lo stato interviene proprio per evitare danni non può mandarlo al diavolo. Anche perché le carte parlano chiaro: zero miglioramenti, zero cure. Non c'è alcuna speranza, non c'è mai stata. Forse è brutto, ma è la verità. Non ha senso protestare per la fantasia.

Alla fine la vicenda si è conclusa con un patteggiamento e una sentenza della cassazione che squalifica il metodo, bollandolo come inconsistente e pericoloso. Tale vicenda servirà agli italiani? Servirà a rendere le persone più obiettive? Servirà a renderle più educate e razionali? Lo spero tanto.

martedì 2 giugno 2015

Torrent e qBittorrent (parte 2)

La prima parte è qui.


Dopo la teoria, arriva la pratica. Per sfruttare correttamente la rete torrent va installato un client torrent e configurato il router.

Come client, dopo aver usato per molti anni ɥtorrent ho deciso di cambiare e usare qBittorrent. Perché? Perché ɥtorrent è diventato sempre più pesante e vi hanno aggiunto un sacco di pubblicità. In fase di installazione, inoltre, propone di installare toolbar e altri software simili che rappresentano un'inutile pericolo per la privacy.

qBittorrent, invece, è gratuito ed open source (a differenza di ɥtorrent), oltre ad avere, personalmente, un'interfaccia più chiara e lineare.
Scaricatelo dal sito http://www.qbittorrent.org/download.php
Scegliete la versione adatta al sistema operativo e successivamente installatelo e avviatelo.

Dovrebbe essere già impostato in italiano, se non è così andate in tools --> options ---> general e impostate "italiano" in "Language". Una volta riavviato, se non era in italiano, vediamo la scheda "Generale".

Già in questa schermata possiamo impostare qualche dettaglio:
  • Togliete la spunta da "Esegui qBittorrent all'avvio di windows". In linea di massima non ha senso avviare questo genere di programmi ad ogni avvio del sistema
  • Assicuratemi che sia spuntata la voce "minimizza qBittorrent nell'area di notifica". In questo modo quando premerete sul tasto "riduci ad icona" sarà presente nella task bar (in basso a destra in Windows)
Ora partiamo dalla parte più interessante della configurazione: la porta e le connessioni:

Nella sezione "connessione" è possibile impostare la porta su cui opererà qBittorrent. In "Porta per connessioni in entrata" impostate un valore tra 1025 e 65535. Questa porta sarà quella usata dal programma. Fino a 1024 non vanno usate perché sono riservate a protocolli standard, sopra non vi sono particolari problemi. L'unica cosa a cui stare attenti è che non entri in conflitto con altri servizi o software che non usano i protocolli standard (es. World of Warcraft). Potete scriverne uno voi o lasciare che sia il programma a generare tale numero premendo su "Casuale". In ogni caso tiratevi giù il numero, vi servirà più tardi.

Gli altri valori da impostare sono basati sulla connessione ad internet a disposizione. Moltissimi hanno un profilo 7 megabit in download e 1 megabit (o 384 kbit). Mi baso su questi parametri per dare un consiglio.
  • "Numero massimo globale di connessioni". Indica quanti peer, ovvero quante altre persone, possono connettersi al nostro client per ricevere o inviare dati. 100 è un valore un po' stringente, ma preferisco evitare possibili congestioni di traffico. Il numero di connessioni che un router può gestire è limitato. Anche se esse non scambiano dati è comunque un onere. Potete provare ad aumentarlo fino a 200 (di più non ha senso) e controllare se avete problemi
  • "Numero massimo di connessioni per torrent". Questo indica quante utenti possono connettersi ad un singolo file. Di solito non scarico più di 2-3 torrent, per cui un buon valore è 50. Non impostatelo troppo vicino al limite globale, altrimenti si rischia che alcuni torrent rimangano bloccati
  • "Numero massimo globale di slot upload". Indica quanti utenti possono scaricare dati da voi. Qui va un numero basso, per via della scarsa banda che le connessioni ADSL offrono. Non ha senso offrire a tante persone la possibilità di scaricare qualcosa se la velocità è bassissima
  • "Numero massimo di slot in upload per torrent". Come per il parametro precedente, ma esso si riferisce al singolo file. Lasciate pure lo stesso valore del parametro precedente, in questo caso.
Passiamo adesso alla prossima scheda, ovvero "Velocità".
Qui bisogna impostare quanta banda occuperà il software. Qui i valori sono espressi in KiB (ovvero Kilobyte). Le connessioni sono spesso descritte in termini di Kbit. 8 Kbit = 1 KiB. Di conseguenza con un upload di 384 kbit, si hanno 48 KiB di banda in upload! Preciso una cosa: molte guide danno un consiglio solo sul limitare l'upload, ma anche il download va limitato. Perché? Perché quando si naviga, si guarda un video su youtube o altro si inviano e si ricevono costantemente dati, se una delle due bande (download o upload) è satura, si bloccherà anche l'altra.  Per impostare i campi, spuntate la casella a sinistra e poi:
  • In upload di solito va impostato un valore tra 15 e 25. Dipende da quanta banda in upload avete.
  • In download va impostato un valore non troppo alto. Su una connessione a 7 megabit si hanno circa 896 KiB a disposizione. Basatevi su questo.
qBittorrent offre anche la possibilità di impostare parametri alternativi che si attivano in base alle impostazioni che date (es. durante la giornata volete impostare dei limiti più bassi per non bloccare la connessione).

L'ultima sezione è "Bittorrent"
Qui potete impostare quanti torrent saranno attivi in un certo istante. Date le caratteristiche della rete torrent di solito va impostato un numero molto piccolo, per chi avesse usato programmi come emule può sembrare strano, ma in questo caso avere un numero elevato file attivi comporterebbe un rallentamento elevato del completamento di un file.

In linea di massima è preferibile impostare 3 come numero massimo di download e upload attivi, mentre a 4 il numero massimo di torrent attivi.

L'ultimo parametro da impostare è "Limite rapporto di condivisione". Spuntate la casella e poi impostate 1,55 come rapporto e infine, nel menù a discesa a fianco controllate che sia impostato il valore "metti in pausa". Se volete sapere perché è buona norma mettere almeno 1,55 rileggete la parte 1 dell'articolo.

Ora premete su "Applica" e poi su "Ok".

Ora il programma è configurato, il prossimo passo è configurare il proprio router, ciò è necessario in quanto senza aprire la porta configurata nel programma, il client torrent non potrà correttamente funzionare. Sul mercato sono presenti un'infinita di modelli, ciascuno ha una propria interfaccia, ma in generale tutti per configurare una porta collegata ad un client torrent necessitano di due passaggi: associare un ip ad un indirizzo MAC e configurare il traffico di una certa porta affinché venga instradato al dispositivo e alla porta corretta.

La procedura per il router TP-LINK TD-W8970 è la seguente.

Prima di qualunque cosa dovete ottenere il vostro MAC address. Un MAC address è un identificativo univoco di ogni scheda di rete (wireless o no) e che è necessario al router per poter identificare in modo univoco un client. Ah, una precisazione per i neofiti: quel MAC non c'entra nulla con Apple. Questo identificativo è collegato allo standard Ethernet e a Metcalfe, che lo ideò. L'acronimo sta per Media Access Control.

Per poter ottenere il vostro MAC address,  aprite il menù "Start" (cliccando sul bottone in basso a sinistra) e nel campo di ricerca digitate "esegui". Nella schermata che si apre digitate "cmd" e premete "Ok".
Nella console che si aprirà digitate "ipconfig /all" (rispettate lo spazio) e comparirà qualcosa di questo genere:


Nell'unica scheda di rete attiva cercate la riga "Indirizzo fisico" (che ha una struttura di questo tipo XY-ZA-BC-DE-FG-HI. Copiate il suo valore e tenetevelo da parte. Copiatevi anche il valore di "Gateway predefinito": è l'indirizzo del vostro router.

Ora dovete accedere al router. Aprite un browser (qui userò Firefox, ma è irrilevante) e digitate sulla barra degli indirizzi il valore presente in "Gateway predefinito" e premete invio.

Comparirà una schermata di autenticazione (mi auguro...altrimenti vuol dire che il vostro router è aperto a tutti). Inserite qui il nome utente e la password.

Da ora in poi la situazione sarà più varia in base al proprio apparato, come accennato prima descriverò come configurare il router TP-LINK TD-W8970.

Aperta l'interfaccia del router, selezionate "DHCP Server" e poi la sottovoce "Address reservation". Quindi premete su "Add new" nella parte destra dello schermo.

In "MAC Address" inserite il valore ottenuto dalla procedura descritta prima. Nel campo sottostante inserite un indirizzo IP che volete assegnare al vostro Pc. Tale IP dev'essere scritto come 192.168.x.yyy. Dove x dev'essere la stessa cifra presente nel campo "Gateway predefinito", mentre yyy dev'essere un valore compreso tra 1 e 254 (1 e 255 di solito sono riservati). Scegliete un numero che non sia già assegnato. Come status impostate "enabled" e premete "Save".
Ricordatevi l'indirizzo IP che avete assegnato in questo passaggio.

Ora andate in "Forwarding" e poi in "Virtual Servers" e infine premete su "add new". Nella nuova schermata vi sono vari parametri da impostare:

In "Service port" scrivete la porta che avete impostato in qBittorrent, mentre in IP Address l'indirizzo IP che avete impostato nella schermata precedente. "Internal port" può rimanere vuoto, controllate che "Status" sia su "Enabled" e premete "Save".

Ora, in molti router (compreso questo) per rendere effettive modifiche del genere, il router stesso va riavviato. Dopo il riavvio ritornate sul pc, riaprite la console (digitate su "Esegui" il comando cmd, come fatto prima) e digitate sempre "ipconfig /all". Ora, nella riga "Indirizzo IPv4" dovrebbe esserci l'indirizzo da voi impostato  nel router e la scritta a fianco "Preferenziale". Ciò indica che la configurazione è andata a buon fine.

Ora potete scaricare i vostri file torrent senza nessun problema. Buon download e alla prossima!






lunedì 1 giugno 2015

Torrent e qBittorrent (parte 1)

logo bittorrent
Tra i neofiti, a cui è rivolto l'articolo, si usano client torrent, ma quasi nessuno sa cos'è una rete torrent, né come funziona né come configurare correttamente client e soprattutto come ci si dovrebbe comportare per mantenere in vita un file.

Cominciamo dal principio: il metodo standard per scaricare un file. L'architettura più usata un po' di anni fa per scaricare un file era l'architettura client-server. Cosa vuol dire? Per fare un paragone con la vita reale chi gestisce un magazzino (server) invia tramite un proprio corriere (che rappresenta la connessione tra server e client) un pacco ad un cliente (client). Il problema è che il magazzino e i corrieri devono gestire tutti i clienti, per cui è possibile, anzi normale, che un cliente debba aspettare più del tragitto magazzino-casa per ricevere il proprio pacco, perché un corriere dovrà passare da altri clienti, fermarsi, consegnare ecc ecc.

Il principio è lo stesso, il server, come tutti i computer connessi ad internet, avrà una connessione ad internet che ha una banda limitata per l'invio di dati (il numero di corrieri!!!) e quindi fino ad un certo numero di client connessi non ci saranno particolari limitazioni, in quanto sarà la banda in download del client a limitare la velocità. Superato un certo numero, però, tutto comincerà a rallentare. Il tutto dipende da quante risorse ha il server, per questo ci sono casi dove scaricare un file è una vera tragedia (vedi Realtek per i driver audio).

Le rete torrent, che è una rete p2p che usa il protocollo BitTorrent, sono strutturate in modo diverso. Non è un server centrale che invia il file a chi lo richiede, ma sono i pc degli utenti che si comportano sia da client che da server. In questo modo, non vi è la necessità di avere un solo server potente, ma più utenti scaricano ed inviano successivamente il file più la distribuzione sarà veloce, tanto che la limitazione risulta essere la banda in download di chi scarica. L'unico compito che rimane al server centrale, detto tracker, è pubblicare un link al file e coordinare i vari client affinché chi faccia richiesta di un file possa connettersi a chi lo sta inviando. Questo vuol dire che per il server centrale non passa un solo frammento del file condiviso, ma solo le informazioni per sapere dove è possibile ottenere il file stesso. Da aggiungere che collegato al protocollo Torrent vi è il DHT. Senza entrare nei dettagli, tale sistema permette ai client di "arrangiarsi" nel caso il server centrale non sia più funzionante. Nei fatti ciascun client tiene traccia degli altri client esistenti e si ricollega ad essi senza disturbare il server centrale. Al momento è utile in caso di problemi o per ricercare più velocemente altri pc che stanno inviando il file richiesto, ma in futuro potrebbero esistere reti composte solo da client.

Tutto bello e fantastico? No, in quanto il funzionamento del tutto è responsabilità dei singoli utenti. In termini tecnici un computer che fa parte di una rete p2p si chiama peer, ma non tutti i peer sono in un certo istante uguali. Quando un peer invia un file si dice che è un seed, seme, mentre se si limita a scaricarlo allora è un leecher, letteralmente: sanguisuga. In una rete di questo tipo è chiaro che la velocità con cui si condivide un file è dovuta al rapporto tra quanti lo stanno inviando (seed) e quanti lo stanno ricevendo (leecher). I client bittorrent disponibili tendono a condividere subito un frammento di un file scaricato, per cui un peer può essere sia seed che leecher, ma per convenzione i seed sono coloro che hanno una copia del file completo e lo stanno inviando.

Cosa succede se troppe persone scaricano un file, ma poi non lo condividono? Il sistema tenderà a rallentare o addirittura a fermarsi, creando code. Per questo è importante aspettare dopo aver finito di scaricare un file di aver inviato una certa quantità di dati, in modo da "restituire il favore" e permettere al file di continuare ad essere distribuito a velocità adeguate. Da molte parti si consiglia di inviare dati pari ad una volta e mezza rispetto a quelli ricevuti, questo per permettere al sistema di giovare del fatto che qualcuno ha ottenuto il file. Se il rapporto fosse di 1 a 1, allora la nostra presenza sulla rete sarebbe neutra, sotto questo rapporto avremmo addirittura creato un danno che qualche altro peer dovrà sopperire e il titolo di leecher ci marchierà a vita. Al momento non vi sono particolari limitazioni per chi, usando un client torrent legittimo, si limita a scaricare, ma non aspetta di restituire almeno una quota pari di dati, ma in futuro la cosa potrebbe cambiare.

Sembra una battaglia di principio, ma questo genere di reti prospera se ciascun utente fa il suo dovere. Ora che ho spiegato i principi di questa rete, rinvio alla seconda parte dell'articolo per la configurazione di un client torrent e del router.

domenica 31 maggio 2015

Biscotti con gocce di cioccolato

Come avevo detto ieri, in questo blog ci sarà informatica e cucina. Dopo la mia disquisizione su Xamarin ecco qui la mia ricetta di biscotti con gocce di cioccolato.

Ingredienti:

400g di farina 00
2 uova
150 g di zucchero
200g di burro
50g di cioccolato fondente o di gocce di cioccolato
mezza bustina di lievito
Scorza di un limone grande o aroma di limone

Si potrebbe anche usare una bustina intera, ma in quel caso dovreste prepararli piccoli piccoli, altrimenti vi troverete dei piccoli tortini!

Preparazione:
In una ciotola grande, oppure sulla tavola creando una fontana con la farina, mettete circa metà della farina, il burro tagliato a pezzettini assieme allo zucchero e alle uova. Il burro va tagliato e lasciato ammorbidire.

Amalgamate per bene gli ingredienti fino ad ottenere un composto omogeneo, quindi unite il lievito e il limone e la farina restante. Lavorate la pasta fino ad ottenere una palla liscia ed omogenea. Se la palla risulta troppo molle aggiungete farina, ma non troppa perché nella fase di tiratura della pasta andrete ad  aggiungerne dell'altra. Ora avvolgete la palla di pasta nella pellicola trasparente e lasciatela riposare almeno mezz'ora in frigorifero.

Se non avete le gocce di cioccolato nell'attesa, oltre a pulire un attimo il tavolo su cui state lavorando, potete spezzettare con l'ausilio di un coltello la cioccolata in pezzetti molto piccoli. Dopo aver atteso che la pasta si sia riposata unite questi pezzetti di cioccolato alla palla di pasta e dopo averla lavorata velocemente, stendetela fino a darle un'altezza di mezzo cm o meno se ci riuscite. Per la forma potete sbizzarirvi, considerando che con il lievito tutto tenderà a deformarsi.

Mettete i vostri biscotti su una teglia ricoperta di carta forno e metteteli in forno preriscaldato a 180° per 20-25 minuti. Teneteli d'occhio e sfornateli quando avranno raggiunto la doratura che preferite.

Consigli:
  • Anziché stendere la pasta potreste, alternativamente, ottenere delle piccole palline di pasta e quindi schiacciarle sulla teglia per avere la classica forma a biscotto. In questo modo l'aspetto sarà anche più rustico.
  • La quantità di cioccolato è quella corretta, ma se volete aumentarla non ci sono problemi, tranne per la linea.
  • Potreste anche spalmare del tuorlo d'uovo sulla superficie dei biscotti, ma non vi sono particolari necessità
  • Come in ogni ricetta la farina va gestita in base a come è messa la pasta: se è già abbastanza asciutta non ha senso aggiungerne, si rischia solo di avere un impasto che si spaccherà, se invece è estremamente bagnato ne va aggiunta.

P.S.Dovrò anche cominciare a fotografare ciò che faccio, se no qui i post sono puro testo!!!


sabato 30 maggio 2015

Xamarin, perché e cos'è

(Articolo modificato dopo pubblicazione iniziale)


Leggendo il mio profilo si può leggere che programmo in C#, ma che sono un programmatore mobile per Android e iOS.

Come è possibile, si domanderanno alcuni, considerando che il linguaggio di programmazione per Android è Java (anche C++ e C) e per iOS obj-c (e swift)?

La risposta è: Xamarin.

Xamarin è un framework, il quale permette di scrivere app in ambiente nativo, quindi con la creazione di apk e ipa e pubblicazione sui rispettivi store e possibilità di usare le risorse del sistema, usando (quasi) esclusivamente il linguaggio C#. Questo è possibile utilizzando l'ambiente Mono, personalizzato per Android e iOS (Xamarin.Android e Xamarin.iOS).


Il solo fatto di poter scrivere app in C# è già una gran cosa, soprattutto in ambiente iOS, e ad oggi è possibile scrivere lo strato Model di una generica app per entrambe le versioni in un colpo solo e condividerlo tra le due piattaforme. Addirittura tre, se si considera Windows Phone. Il risparmio di tempo è notevole, soprattutto se la app gestisce una certa mole di dati (se interagisce con un gestionale, questa parte può essere composta tranquillamente da 3000 e più righe di codice)

La parte grafica, invece, deve essere composta singolarmente per ogni piattaforma. Se comunque si usa il linguaggio C#, ci si appoggia alle risorse dell'ambiente sottostante. In iOS si usano le storyboard e i file .nib, in Android si richiamano i file xml. Lato Android in questo settore il framework risulta una sorta di binding, infatti le sintassi tra ambiente nativo e ambiente Xamarin risultano estremamente simili, dove la differenza è più dovuta al name convention che al linguaggio di programmazione.

Es. recupero di un oggetto da un xml per Android
//java, nativo
Button bottone = (Button) findViewById(R.id.my_button);

//C#, Xamarin
var bottone = FindViewById<Button>(Resource.Id.my_button);

In ambiente iOS le cose sono un po' diverse. Nel caso di un file .nib La piattaforma crea una sorta di clone del file .h (header), comunque da popolare tramite drag 'n' drop. Il "clone" viene generato in automatico e vi sono i riferimenti ai singoli componenti grafici. In questo modo, come nell'ambiente nativo, un oggetto grafico è una proprietà (privata) della classe che gestisce il file stesso.

Oltre a permettere la condivisione del codice e di non dover imparare altri linguaggi di programmazione, il framework Xamarin permette di usare nelle app quasi tutte le funzionalità del framework .NET (v 4.5). Dico quasi, perché alcune componenti non sono disponibili, in quanto in Mono non tutte le librerie dell'ambiente .NET sono fruibili e nell'ambiente mobile vi sono ulteriori restrizioni, anche se al momento non ne ho trovate di seccanti. Non scriverò qui un elenco di ottime cose che sono disponibili in ambiente C# e librerie collegate. Mi limito a segnalare che poter usare Visual Studio (per la parte Android) è una gran cosa.

Altra cosa da segnalare, la possibilità di creare binding con l'ausilio di tool automatici, ma qui bisogna conoscere le piattaforme native per ovviare a vari problemi (es. le classi interne di java possono essere di istanza o no, in C#sono solo slegate dall'istanza della classe contenitore. In Java c'è la covarianza per il tipo di ritorno, in C# no, ecc ecc.)

Naturalmente vi sono degli svantaggi con questo genere di approccio:
  • La piattaforma non è completamente trasparente. Il programmatore deve comunque conoscere un minimo ciò che vi è sotto. Ad esempio deve sapere che in una app iOS se una UIView contiene un riferimento alla UIView padre c'è il rischio di un memory leak. In Android, certi oggetti hanno un riferimento sia nella macchina virtuale nativa (Dalvik o ART) sia in quella di Mono, con rischi di memory leak e un aumento della memoria usata
  • Le app create con Xamarin sono più grosse, soprattutto in Android
  • Può capitare che alcune funzionalità disponibili in ambiente nativo non lo siano in Xamarin. Personalmente non ho riscontrato tale limitazione, ma potenzialmente può capitare
  • Si possono sommare i bug già presenti in Android e iOS con quelli del framework. Questo è un problema di tutti i framework, d'altro canto.
  • Le performance sono più basse. Essendoci un'interazione tra due macchine virtuali (Android) e una generazione automatica del codice (iOS) le prestazioni dell'app sviluppata possono essere sensibilmente peggiori
Xamarin, quindi, conviene se si ha familiarità con l'ambiente C# e si progetta di sviluppare app grosse con un Model molto sviluppato. In tempi recenti hanno raggiunto un milione di sviluppatori univoci e ciò fa ben sperare che possa diventare una realtà diffusa e non limitata a pochi, ma al momento in cui scrivo (30/05/2015) i prezzi per uno sviluppatore indipendente sono ancora troppo alti (300 dollari all'anno per una versione Indie, a cui va aggiunto il costo di una licenza Apple, altri 99 dollari, e l'acquisto di un Mac per poter sviluppare in ambiente iOS). Inoltre alcune funzionalità del framework sono disponibili in base alla licenza (la compilazione LLVM è disponibile nelle licenze Business ed Enterprise, ma anche la Business ha dei limiti).

Personalmente ritengo grandioso che si possa sviluppare app per più piattaforme senza dover conoscere tutti i segreti delle piattaforme stesse e mi auguro che in futuro si arrivi a questo approccio, ma questo prodotto è una scelta interessante solo per aziende medio-grandi, ma in futuro potrebbe non essere così.

Un inizio fuori periodo

Mi sono chiesto perché creare un blog ora, nel 2015 a 26 anni. Tra Facebook, Twitter e altri social non sembra avere senso. Se uno vuole farsi conoscere può usare altri mezzi. Eppure, nel mio mestiere di informatico soluzioni, spunti e chicche le ho trovate in 3 posti:
Per cui, voglio fornire anch'io qualche piccola soluzione a programmatori disperati e ad utenti sull'orlo di una crisi di nervi.

Il blog non parlerà solo di informatica. Magari ci metterò qualche riflessione personale, ma di sicuro parlerò anche dell'altra mia passione, ovvero la cucina.

I temi del blog non saranno fissi, può essere che parli di determinati eventi attuali o che racconti qualcosa di particolare. Vedremo come andrà.