Archivio Autore: acquariusoft

Articolo il tuo sito in un’app su ioprogrammo

4-213g

Sul numero 213 di questo mese di ioprogrammo √® stato pubblicato il mio articolo su come utilizzare Xamarin per portare il vostro blog wordpress in un’app su Windows, Android e iOS.

Buona lettura ūüėÄ

Un nuovo mediacenter per Xbox su ioprogrammo

E’ stato pubblicato su ioprogrammo numero 2012 di aprile 2017 il mio articolo su come scrivere il proprio mediacenter per Xbox utilizzando tutta la potenza delle app UWP

4-212g

Eliminare ogni traccia di visual studio dal sistema

Con l’arrivo di Visual Studio 2017 in versione RTM molti di voi si troveranno nella situazione di voler disinstallare la versione che hanno attualmente e mantenere solo la nuova.

Purtroppo anche procedendo con la disinstallazione molti componenti non vengono rimossi completamente occupando spazio inutile. Esiste per√≤ un’applicativo che ci permette di fare una pulizia completa del nostro sistema.

Si chiama ovviamente Visual Studio Uninstaller ed è sviluppato direttamente da Microsoft e come và tanto di moda ultimamente è opensource e potete scaricarlo direttamente dalla pagina github del progetto

https://github.com/Microsoft/VisualStudioUninstaller/releases

Una volta estratto il file vi baster√† aprire un prompt dei comandi in modalit√† amministratore e lanciare l’eseguibile¬†Setup.ForcedUninstall.exe.

Non dovremo poi far altro che rispondere Y per confermare l’operazione.

Sul mio surface l’operazione dopo la disinstallazione normale mi ha permesso di recuperare altri 7 giga che non sono pochi!

Buon coding!!

 

Utilizzare il ProgressRing nell’ActivityIndicator in Xamarin Forms

Su Xamarin forms per le app UWP il componente ActivityIndicator √® mappato sulla classe ProgressBar e come √® possibile¬†potete vedere nello screen non √® un comportamento congruente con le altre piattaforme e la momento¬†non c’√® modo di cambiarlo con un ProgressRing.

activityindicatorCon il meccanismo dei CustomRenderer possiamo ovviare a questo problema in modo molto semplice inserendo una semplice classe nel nostro progetto UWP

[assembly: ExportRenderer(typeof(ActivityIndicator), typeof(RingActivityIndicatorRenderer))]
namespace DoGethersApp.UWP
{
    public class RingActivityIndicatorRenderer : ViewRenderer<ActivityIndicator, Windows.UI.Xaml.Controls.ProgressRing>
    {
        private Brush foregroundDefault;
        protected override void OnElementChanged(ElementChangedEventArgs e)
        {
            base.OnElementChanged(e);
            if (e.NewElement != null)

            {
                if (Control == null)
                {
                    SetNativeControl(new Windows.UI.Xaml.Controls.ProgressRing());
                    Control.Loaded += OnControlLoaded;
                }
                UpdateIsRunning();
            }
        }

        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);
            if (e.PropertyName == ActivityIndicator.IsRunningProperty.PropertyName)
            {
                UpdateIsRunning();
            }

            else if (e.PropertyName == ActivityIndicator.ColorProperty.PropertyName)
            {
                UpdateColor();
            }
        }

        void OnControlLoaded(object sender, RoutedEventArgs routedEventArgs)
        {
            foregroundDefault = Control.Foreground;
            UpdateColor();
        }

        void UpdateColor()
        {
            Color color = Element.Color;
            if (color == Color.Default)
            {
                Control.Foreground = foregroundDefault;
            }
            else
            {
                Control.Foreground = color.ToBrush();
            }
        }

        void UpdateIsRunning()
        {
            Control.IsActive = Element.IsRunning;
        }
    }

    internal static class ConvertExtensions
    {

        public static Brush ToBrush(this Color color)
        {
            return new SolidColorBrush(color.ToWindowsColor());
        }

        public static Windows.UI.Color ToWindowsColor(this Color color)
        {
            return Windows.UI.Color.FromArgb((byte)(color.A * 255), (byte)(color.R * 255), (byte)(color.G * 255), (byte)(color.B * 255));
        }
    }
}

in questo modo verranno modificati tutti gli¬†ActivityIndicator per utilizzare il ProgressRing, se vogliamo avere per√≤ maggior libert√† e decidere se ¬†e quando utilizzarlo ci baster√† fare nel progetto comune una nuova classe che estende¬†ActivityIndicator e modificare il CustomRender facendo riferimento a quest’ultima classe.

In questo modo potremo decidere su utilizzare una o l’altra a seconda delle esigenze, sulle altre piattaforme sar√† visualizzato sempre lo stesso componente mentre su windows verr√† visualizzato un tipo di progressbar o l’altra in base alla classe che utilizzeremo.

Buon coding!!!

 

UWP: ricreiamo la funzione ToTitleCase

Come ben sappiamo la piattaforma UWP non dispone di tutte le funzionalità presenti nella versione del .Net Framework versione desktop. Una funzione che può essere utile in alcuni casi è ToTitleCase che come possiamo intuire dal nome converte il testo in parole con iniziali maiuscole come è possibile vedere nella documentazione ufficiale

https://msdn.microsoft.com/en-us/library/system.globalization.textinfo.totitlecase%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396

La¬†versione standard permette di fare controlli pi√Ļ fini anche in base alla lingua di sistema ma se abbiamo bisogno solo della sua funzione base possiamo¬†utilizzare questo semplice metodo

public string toTitleCase(string value)
{
    if (value == null)
        return null;
    if (value.Length == 0)
        return value;

    StringBuilder result = new StringBuilder(value);
    result[0] = char.ToUpper(result[0]);
    for (int i = 1; i < result.Length; ++i)
    {
        if (char.IsWhiteSpace(result[i - 1]))
            result[i] = char.ToUpper(result[i]);
        else
            result[i] = char.ToLower(result[i]);
    }
    return result.ToString();
}

che converte in maiuscolo l’iniziale di ogni parola ed in minuscolo quelle seguenti.

Una piccola utility che a volte può tornare utile

Buon coding!!!

Visual studio per Mac, facciamo un pò di chiarezza

Durante Connect() nel mese di novembre √® stato presentato Visual Studio per Mac. Essendo fruitore di molti forum tecnici ho visto molta confusione su cosa sia questo IDE e cosa permetta effettivamente di poter sviluppare, vediamo quindi di fare un p√≤ di chiarezza sull’argomento.

Partendo dall’annuncio ufficiale

https://msdn.microsoft.com/magazine/mt790182?f=255&MSPPError=-2147217396

possiamo vedere chiaramente qual’√® lo scopo di questo IDE

The primary workloads supported by Visual Studio for Mac are native iOS, Android and Mac development via Xamarin, and server development via .NET Core with Azure integration. It gives you all the tools you need to develop the rich, native mobile app experiences that users expect today, and the cloud-based server back ends to power them.

Quello che possiamo quindi realizzare sono

  • Applicazioni Xamarin per iOS, Android e Mac, quindi lo sviluppo di app UWP e Windows/ Windows Phone 8.1 non √® supportato
  • Applicazioni .NET Core

Osservando poi bene l’IDE

IC863335

chi ha già utilizzato Xamarin Studio su Mac non potrà non notare come i due ambiente siano praticamente identici, Visual Studio per Mac infatti non è altro che una versione aggiornata e migliorata di Xamarin Studio.

Lavorando poi su un ambiente che non è Windows è facile immaginare che sviluppare app  WPF, Windows Forms, UWP o altro non è non sarà possibile (a meno di non avere un emulatore completo di windows disponibile su Mac)

Spero di aver fatto un pò di chiarezza, se avete qualche altro dubbio in merito non esiste a scrivermi nei commenti

Buon coding!!

 

UWP: Utilizzare immagini diverse in base al tema corrente

Una delle esigenze che maggiormente occorre tenere in considerazione nello sviluppo di un’app, soprattutto in ambito mobile, √® quella di essere coerenti con il tema che l’utente st√† utilizzando, per visualizzare elementi grafici che siano ben visibili¬†ed evitare ad esempio pulsanti con immagini che si confondono con il colore di base del tema e diventano praticamente invisibili.

Una delle funzionalit√† pi√Ļ comode del framework sono i¬†qualificatori che permettono tramite una determinata formattazione del nome del file o della cartella in cui esso √® inserito di specificare se e quando deve essere utilizzato. Lo standard da utilizzare √® del tipo

[resourceName].[qualifierString].extension

Come abbiamo detto √® possibile utilizzarlo in due diversi modi, o creando una cartella con l’apposito nome

xaml-layout-view-ex-2

oppure specificandolo nel nome del file

xaml-layout-view-ex-1

a questo indirizzo è disponibile un elenco dei qualificatori utilizzabili per discriminare in base alla lingua, risoluzione dello schermo ecc.

https://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.applicationmodel.resources.core.resourcecontext.qualifiervalues.aspx

Quello che a quanto pare non viene citato nella documentazione ufficiale è la possibilità di utilizzare anche un qualificatore per indicare il tipo di tema a cui la risorsa deve fare riferimento utilizzando

theme-[dark/light]

in questo esempio

theme-dark.PNG

verr√† utilizzata normalmente l’icona delete.png quando vi sar√† fatto riferimento e solo in caso di tema scuro essa verr√† sostituita da delete.theme-dark.png

Una soluzione decisamente interessante, soprattutto se state realizzando una UWP con Xamarin dove sar√† pi√Ļ difficile accedere alle impostazioni del tema.

Rigrazio Fela per avermi fatto scoprire questa soluzione dopo averla cercata per ore ūüėÄ spero possa essere utile anche a voi.

Buon coding!!

Il mio primo MVP Summit

Come tutte le cose, soprattutto quelle belle, finiscono subito e così domenica sono rientrato in italia dopo il mio primo MVP summit.

Devo dire che per essere la prima volta le mie aspettative erano molto alte e fortunatamente sono state soddisfatte ūüėÄ

E’ stata una settimana intensissima di sessioni, party, incontri, chiacchiere e risate che mi hanno fatto capire perch√® c’√® gente che da anni si reca a questo evento e come finisce non f√† altro che aspettare il seguente.

Oltre alle sessioni √® questo clima di vera community che si respira che ti permette di fare networking con persone che vengono dall’altra parte della terra ( anche se a dire il vero in questo caso eravamo noi italiani quelli ūüėõ ) e di incontrare e scambiare quattro chiacchiere con dipendenti microsoft che prima evevo¬†visto solo su video di Channel 9 o dei grandi eventi ufficiali.

Quello che mi ha stupito è stato proprio questo clima di informalità dove con un bicchiere di caffè in mano, una birra e magari in un pub o su un autobus potevi discutere con chiunque di qualunque livello e di qualsiasi nazionalità

Mentre i contenuti naturalmente sono sotto NDA, posso tranquillamente ringraziare tutte le persone che hanno trascorso con me questa fantastica avventura e che mi hanno fatto da guida essendo al mio primo Summit ed anche al mio primo viaggio oltre oceano.

Devo per√≤ ringraziare nel dettaglio la mia famiglia che ha sopportato la mia assenza ūüėÄ , Cristina che mi ha sopportato per tutti i problemi tecnici che ho avuto e che ha cercato di risolvere, Nicol√≤ che mi ha sopportato come compagno di stanza e soprattutto tutti i componenti di DotNetToscana che come al solito accolgono tutti sotto la loro ala protettiva e sono sempre prodighi di consigli e suggerimenti (anche culinari) e perch√® no anche a scarrozzare tutti in giro per Siattle con l’autista e cicerone d’eccezione Marco Dal Pino ūüėÄ

Naturalmente sono tornato con molti gadget che divider√≤ al prossimo evento community e visto che c’ero ne ho approfittato per spendere qualche soldino ed acquistare anche il Surface Dial che da noi √® introvabile e del quale a breve leggerete qualche post.

A questo punto non mi resta che fare altro che augurarvi buon coding come al solito ed io non posso far altro che sperare di essere rinnovato il prossimo anno e di poter andare di nuovo al Summit ūüėÄ

mvp_summit

Perchè community? (#TecHeroes loves #Gamedev Tour)

Poche settimane f√† insieme a Microsoft con DotNetAbruzzo abbiamo organizzato la tappa Aquilana del¬† #TecHeroes loves #Gamedev Tour, un’evento itinerante con varie tappe in giro per l’italia per far conoscere il mondo dello sviluppo di videogame.

Come √® consuetudine Microsoft in queste situazioni si appoggia alle community locali che conoscono bene il territorio per avere una mano nell’organizzazione e nel contempo d√† essa stessa una mano pubblicizzando l’evento e facendo quindi conoscere la community.

In questo caso come DotNetAbruzzo, di cui sono fondatore, siamo stati onorati della scelta, ancor di pi√Ļ per la giovinezza della nostra community che ha da poco superato il primo anno dalla fondazione.

L’evento √® stato un gran successo sia in partecipazione che in interesse, stupendo gli stessi speaker ( che diciamo non sono proprio neofiti e quindi ne hanno viste di platee ūüėÄ ) e ci ha ripagato come organizzatori e speaker di tutto quello che abbiamo fatto.

Questo √® un tipico esempio di quello che vorrei far capire alle persone che mi chiedono “perch√® utilizzi tempo ed energie per portare avanti la community?”

Dietro cose del genere c’√® molto lavoro di organizzazione, ricerca della location, pubblicit√†, preparazione delle sessioni ecc e se devo confessare a volte c’√® anche sconforto quando ti trovi davanti ostacoli futili ma poi ti rimbocchi le mani ed insieme agli altri membri cerchi di aggirare l’ostacolo (come non posso ringraziare Gino per la grande pazienza con me e lo sbattimento per la location ūüėÄ ).

Il tutto poi è fatto in modo gratuito, anzi spendendo anche dei soldi in viaggi, cene, alloggi che nessuno ti rimborsa. A questo punto la domanda torna, perchè?

Almeno nel mio caso √® la voglia di condividere e l’amore che ho per quello che faccio e che fortunatamente √® il mio lavoro. Vedere persone interessate, soprattutto ragazzi, che finito l’evento ti vengono a parlare, ti fanno domande e ti ringraziano personalmente non ha valore. C’√® poi la voglia di voler dare una mano alle nuove generazioni, quando ero io l√¨ al loro posto avrei voluto poter avere occasioni del genere ed avendo due figlie piccole vorrei che anche loro potessero avere occasioni del genere in futuro per poter sapere cosa li circonda e quale potrebbe essere il loro impegno futuro, soprattutto in un campo che √® quello della tecnologia che avanza ad una velocit√† impressionante ed in cui le universit√† fanno fatica a stare al passo.

Questa volta siamo stati fortunati e l’universit√† ha anche realizzato un video dell’evento quindi potete avere un’idea di quello che vi siete perso se non avete partecipato, e magari potr√† farvi venire voglia di andare ad un’altro evento. Quello che voglio consigliarvi √® di guardarvi intorno, di qualsiasi cosa siate appassionati cercate e sicuramente troverete una community in cui potrete partecipare per condividere le vostre passioni e magari se non c’√® fate come me √® fondatela ūüėÄ

Spero di non avervi annoiato con questo lungo post ma di aver invece stuzzicato la vostra voglia di conoscenza.

Di seguito trovate il video di cui vi parlavo.

Come sempre buon coding…….

Eliminare le lingue non inserite quando si invia un’app UWP allo store

Se state sviluppando un’app solo a livello nazione per cui non volete inserire la lingua inglese potreste ritrovarvi¬†la richiesta , anche se non avete inserito i relativi file, di compilare¬†i dati nello store anche¬†per questa lingua nel momento in cui la invierete.

Questo problema si presenta quando una libreria che stiamo utilizzando contiene già alcuni file localizzati, ad esempio per gestire i messaggi di errore (es. MVVM Light), in questo caso Visual Studio generà erroneamente anche il pacchetto per la lingua inglese.

Per risolvere il problema basterà aprire il file di progetto ed aggiungere la seguente riga
<SkipIntermediatePriGenerationForResourceFiles>false</SkipIntermediatePriGenerationForResourceFiles>

subito dopo l’apertura del primo tag¬†PropertyGroup che troverete in modo da avere una situazione del genere

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
 <PropertyGroup>
 <SkipIntermediatePriGenerationForResourceFiles>false</SkipIntermediatePriGenerationForResourceFiles>
 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

Se avete dei problemi a trovare il¬†file di progetto potete scaricare il progetto facendo tasto destro sull’elemento

unload_menu

e poi editarlo sempre utilizzando il tasto destro sul progetto scaricato

edit_project

una volta modificato il file, sempre con il tasto destro, sarà possibile ricaricarlo.

NB: Potreste ritrovarvi con un messaggio di errore simile a questo

err_1potete tranquillamente ignorarlo e caricare il vostro progetto.

Se adesso genererete il vostro pacchetto e lo invierete allo store vedrete che verranno richiesti i dettagli esclusivamente per le lingue effettivamente incluse nella vostra app

Grazie a Fela per il tip!!!

Buon coding!!

Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi