Skip to main content

Utilizzare GitHub con Mercurial e TortoiseHG

Introduzione

Non esiste sviluppatore degno di questo nome che non conosca GitHub, il popolare servizio di hosting di progetti software basato su tecnologia Git. Nel remoto caso in cui non ne abbiate mai sentito parlare vi consigliamo di recuperare le apposite voci di wikipedia relative rispettivamente a GitHub e a Git e i relativi siti ufficiali github.comgit-scm.com.

In caso contrario, continuate a leggere: saprete infatti fin troppo bene che l’utilizzo del servizio GitHub è convenzionalmente vincolato all’adozione di Git, un sistema di controllo di versione (source-control manager o SCM) particolarmente innovativo che in questi ultimi anni ha avuto – anche grazie alla popolarità dello stesso GitHub – una grandissima affermazione, soppiantando gli antichi e gloriosi standard open-source come CVS e SVN grazie ad un’architettura più moderna e basata su un sistema di versioning distribuito piuttosto che centralizzato.

Grazie a queste caratteristiche innovative oggi Git è senza ombra di dubbio il SCM più utilizzato da tutta la comunità Linux – non per niente è stato ideato da un certo Linus Torvalds. Ha avuto però certamente minore fortuna in ambiente Windows, per via di due principali motivi:

  • una tardiva diffusione delle principali interfacce grafiche di gestione – msysgit e TortoiseGit su tutte – particolarmente care agli utenti Windows, per loro natura meno avvezzi all’uso della command-line.
  • la quasi-contemporanea diffusione di Mercurial (noto anche come HG), un SCM distribuito dalle caratteristiche innovative simili a quelle di Git e caratterizzato da un maggiore supporto a livello applicativo per il sistema operativo di casa Microsoft.

Ad influire notevolmente sulla diffusione di Mercurial in ambiente windows è stato, nel 2008, il lancio del sito bitbucket.org, interamente basato su Mercurial (fino al 2011, anno in cui è stato integrato anche Git) e avente caratteristiche in tutto e per tutto simili a quelle offerte da GitHub.

Non è mia intenzione addentrarmi ulteriormente sull’argomento, né dire la mia su quale sia effettivamente il SCM e/o il sito migliore: personalmente, da affezionato utilizzatore di entrambi, ritengo che siano due ottimi prodotti e che – al di là della diversa filosofia di approccio – garantiscano allo sviluppatore funzionalità grossomodo analoghe per la quasi totalità degli utilizzi comuni.

Per una analisi approfondita delle somiglianze e differenze tra Git e Mercurial consiglio di leggere questi due ottimi (seppur datati) articoli. Il primo ha un approccio più tecnico e schematico, il secondo adotta invece un registro più ironico e discorsivo: scegliete quello che più vi ispira, allo stesso modo con cui spesso si finisce per scegliere l’SCM da utilizzare.

(altro…)

 

XCode: cambiare lo stile e/o il colore della Status Bar in Objective-C

A partire da iOS7 lo stile della status bar del dispositivo può essere modificato in due modi:

  • per-Controller, ovvero relativamente a ciascun controller.
  • per-Application, ovvero relativamente all’intera applicazione.

Per-Controller

La modalità predefinita per iOS7 e superiori è la prima, il che significa che il sistema si aspetta che le modifiche vengano effettuate all’interno di ciascun  controller. Per ottenere questo risultato occorre aggiungere la seguente riga di codice al metodo viewDidLoad:

E quindi implementare il metodo preferredStatusBarStyle, facendo in modo che restituisca lo stile desiderato. Ad esempio, se abbiamo impostato uno sfondo scuro è probabile che ci servirà uno stile che preveda un contenuto chiaro come nell’esempio seguente:

Mentre in caso di sfondo chiaro è probabile che ci troveremo meglio con lo stile predefinito, che prevede appunto un contenuto scuro:

E così via.

Per-Application

Se vogliamo modificare lo stile della Status Bar per tutti i controller della nostra applicazione, la prima cosa da fare è cambiare l’impostazione predefinita. Per far questo occorre aggiungere una chiave all’elenco delle proprietà personalizzate dell’applicazione, accessibili mediante il file info.plist nella cartella /Supporting Files/ oppure selezionando il Target relativo all’applicazione stessa e posizionandosi nella tab denominata Info:

app-info.plist
Due diversi modi per accedere alle proprietà personalizzate dell’applicazione.

 

La proprietà che va aggiunta è la seguente:

E’ possibile controllare di averla aggiunta correttamente osservando l’elenco modificato tramite l’interfaccia utente di XCode:

view-controller.based

Una volta fatto questo è sufficiente aggiungere la seguente riga di codice al metodo didFinishLaunchingWithOptions del file AppDelegate.m relativo alla nostra applicazione:

Per ulteriori approfondimenti su come personalizzare la Status Bar consigliamo la lettura:

Buono studio e… felice sviluppo!

 

 

Android Studio: personalizzare l’immagine “torna indietro” dell’ActionBar (homeAsUpIndicator)

Come molti di voi sapranno, il controllo ActionBar di una applicazione Android può essere configurato per prevedere una “navigazione all’indietro” (Up Navigation) da una Activity a un’altra, purché quest’ultima sia stata configurata come parent.

Per una guida completa alla Up Navigation rimandiamo all’apposita pagina della documentazione ufficiale. Ricorderemo solo che, per visualizzare l’icona, è necessario impostare correttamente il metodo setDisplayHomeAsUpEnabled()  nel seguente modo:

Questo comando provocherà la visualizzazione di una icona di navigazione sul lato sinistro della ActionBar dell’Activity. 

Per sostituire l’icona con un drawable personalizzato è sufficiente inserire questa dichiarazione all’interno del proprio theme:

Il file dove inserire questa istruzione è solitamente  /values/styles.xml , ma può essere anche  /values/themes.xml  o un altro file, a seconda di come avete organizzato la vostra applicazione. Nel caso in cui vogliate supportare anche API inferiori alla 11 il contenuto di cui sopra andrà inserito nel file presente nella cartella /values-v11/ , mentre nella cartella /values/  andrà utilizzata la sintassi compatibile con le API meno recenti:

 

Di seguito vi proponiamo due archivi .rar contenenti alcune icone di esempio per la personalizzazione del vostro homeAsUpIndicator: in entrambi i casi si tratta di icone chiare, da utilizzare quindi per una ActionBar che abbia un background color di colore scuro.

Felice sviluppo!

 

Android: come estendere una ImageView in larghezza adattando l’altezza in modo proporzionale

Può capitare, sviluppando una app per dispositivi Android, di avere l’esigenza di estendere le dimensioni di una immagine in modo da farle coprire orizzontalmente tutto lo schermo disponibile, mantenendo inalterate le sue proporzioni. Questo significa che l’altezza dell’immagine suddetta dovrà adattarsi in modo proporzionale alla larghezza, così da mantenere inalterato l’aspect ratio originario.

Il problema

Ottenere questo risultato in HTML è estremamente semplice: è sufficiente impostare la width dell’immagine in questione al 100%, omettendo qualsiasi informazione in merito alla height e lasciando così che sia il browser a determinarla in modo proporzionale. Sfortunatamente, in Android la questione è più complessa: nell’elemento ImageView altezza e larghezza sono due parametri obbligatori, che è possibile valorizzare con un numero fisso in px, dp o altro, in base al contenitore mediante il comando match_parent oppure in base al contenuto mediante il comando wrap_content. In tutti e tre i casi non è possibile definire un comportamento dell’altezza realmente proporzionale rispetto al contenuto. Il meglio che è possibile fare utilizzando una normale ImageView è impostare gli attributi android:layout_widthandroid:layout_height e android:scaleType in modo che si adattino automaticamente alle dimensioni del layout contenitore nel seguente modo:

Questo metodo consente di ottenere il risultato sperato nella maggior parte degli scenari, ma ha il grande difetto di non funzionare allo stesso modo su tutti i dispositivi Android e con tutte le immagini.

La soluzione

Chi ha detto che è necessario utilizzare una normale ImageView? Questo interessantissimo post su StackOverflow mostra come è possibile estendere una View per ottenere un risultato analogo a quello che stiamo cercando. Partendo da quell’esempio possiamo quindi sviluppare una estensione della classe ImageView che dimensioni automaticamente l’altezza sulla base del ridimensionamento della larghezza in modo proporzionale rispetto all’aspect ratio dell’immagine originaria.

Questo il codice completo:

 

E questa è l’implementazione all’interno di un layout XML:

Ricordate, in entrambi gli esempi, di sostituire com.my.namespace con il  namespace utilizzato nella vostra applicazione.

Felice sviluppo!

 

 

Impostare un campo ID auto-increment con Entity Framework Code-First

Ho già avuto modo in un vecchio post di parlare delle potenzialità del nuovo approccio code-first introdotto da Entity Framework 6 che consente, tra le altre cose, di definire un data model completo partendo da una o più classi C# dette, per l’appunto, Entities. Una delle domande più frequenti che mi sono state fatte è quella relativa a come impostare il campo Id (o chiave primariao primary key) di una Entity in modo autoincrementale: in altre parole, come dire al Database di assegnare un identificativo numerico crescente ad ogni record.

Tanto MySQL quanto Microsoft SQL Server supportano in modo nativo colonne autoincrementali. Come fare in modo che il campo di una Entity venga definito in tal modo sul DB che andremo a generare?

La risposta è semplice: è sufficiente decorare la nostra proprietà con un apposito DatabaseGeneratedAttribute, specificando che si tratta di una identità generata automaticamente dal Database nel seguente modo:

Il campo ID sarà generato in modo autoincrementale, garantendo un ID univoco a ciascun record di tipo Item.

Felice sviluppo!