Dependency Injection su Maui

La dependency Injection è una delle funzioni più comode per poter avere del codice facilmente modificabile ma se vogliamo usarla su Maui potremmo incorrere in qualche problema.

Ma andiamo con ordine, come siamo abituati a fare iniziare con il creare la nostra interfaccia con i metodi che ci interessano

public interface IApiAccess
{
    bool Test();
}

e andiamo poi a creare la relativa classe che andrà ad implementarla

public class ApiAccess : IApiAccess
{
    public bool Test()
    {
        return true;
    }
}

Il passo successivo sarà naturalmente quello di andare a registrare il nostro singleton nella classe mauiprogram.cs

mauiAppBuilder.Services.AddSingleton<IApiAccess, ApiAccess>();

A questo punto quello che vogliamo fare è andare ad utilizzare questa interfaccia nella nostra pagina quindi nel costruttore andremo ad aggiungerla come parametro

public MainPage(IApiAccess apiAccess)
{
    InitializeComponent();
}

se a questo punto andremo ad eseguire il nostro programma quello a cui ci troveremo davanti sarà un bell’errore in fase di esecuzione che ci indica che non è presente nessun costruttore senza parametri

Come risolvere il problema quindi? Per fortuna la soluzione è molto semplice, dobbiamo andare ad aggiungere una nuova riga sempre nel file mauiprogram.cs dove andiamo ad aggiungere come Transient la pagina che ci interessa

builder.Services.AddTransient(<MainPage>);

purtroppo dovremo andare ad aggiungere una riga per ogni pagina in cui vogliamo andare ad utilizzare la dependency injection direttamente nel costruttore ma in questo modo potremmo utilizzarla con ogni classe che vogliamo.

Spero questa soluzione possa essere interessante ed evitarvi qualche mal di testa 😀 e come sempre buon coding!!

Diamo il benvenuto a MAUI, il nuovo re di Xamarin Forms

Ieri a build è stato presentato MAUI (.NET Multi-platform App UI) che sarà la base di sviluppo per i futuri progetti Xamarin multipiattaforma.

NET MAUI è un framework di nuova generazione per sviluppare applicazioni native multipiattaforma per dispositivi mobile e desktop. E’ stato sviluppato utilizzando la nuova generazione del framework .NET e di gestione dei progetti e introduce un nuovo modo di sviluppare applicazioni con una architettura  MVU (Model-View-Update) oltre a XAML e MVVM che conosciamo bene.

MAUI semplificherà inoltre lo sviluppo di applicazioni cross platform native introducendo una struttura con un singolo progetto e risorse cross-platform. Inoltre risorse condivise come font ed immagini e le tecnologie di hot reload e hot restart saranno presenti sin dall’inizio

Diciamo che in questo caso un’immagine vale più di molte parole

Riassumendo quindi avremo:

  • Un singolo progetto per le varie piattaforme
  • Una posizione dove avere le risorse come font ed immagini
  • Possibilità di gestire il codice specifico per le varie piattaforme

Ok tutto bello, ma quando potremo metterci le mani? Il lavoro è lungo come possiamo ben immaginare, una prima preview sarà disponibile più avanti quest’anno, mentre il rilascio come GA è previsto insieme al framework .NET 6 per novembre 2021, è disponibile anche una roadmap pubblica su GitHub.

Il lavoro da fare è molto e dovranno essere anche riscritte e modificate molte librerie e pacchetti di controlli, quindi ci sarà tutto il tempo per portarci a questa transizione.

Io sinceramente non vedo l’ora di poter mettere mano alla prima preview e testarla, e voi?

Intanto nell’attesa vi auguro buon coding e vi lascio il link all’articolo originale dove vengono presentate tutte le novità di Xamarin QUI

Il futuro si fà dual (screen)

Sono passati ormai più di cinque mesi da quando a inizio ottobre Microsoft ha presentato i suoi nuovi dispositivi della linea Surface che andranno a dar vita al nuovo filone dei dispositivi Dual Screen, rispettivamente il Surface Neo per quanto riguarda il mondo Windows ed il surface Duo per quanto riguarda il mondo Android.

surface duo e neo

I device

Microsoft per questa nuova avventura non si è limitata esclusivamente alla parte hardware, altrimenti avremmo avuto solo dei bei giocattolini su cui utilizzare 2 app contemporaneamente, ma è andata a realizzare tutta una serie di librerie e di modifiche ai sistemi operativi che permettono di sfruttare al massimo la presenza dei due schermi.

Per quanto riguarda il Neo è stata realizzata una nuova versione di Windows denominata 10X alleggerita e rivista che permette di avvicinarsi più ad un’utilizzo stile Tablet mentre per il Duo è stato fatto un lavoro insieme a Google per inserire all’interno del sistema del robottino verde nuove API per la gestione dei dual screen.

Al momento non è ancora disponibile una data di rilascio dei due device ma per noi sviluppatori sono già disponibili tutta una serie di emulatori ed SDK (entrambi in versione preview) per poter iniziare a fare i test ed adattare le nostre applicazioni.

Il punto di partenza per il mondo del dual screen è la pagina docs https://docs.microsoft.com/en-us/dual-screen che ci permette di accedere a tutti gli strumenti e la documentazione di cui abbiamo bisogno.

Gli emulatori

Ma andiamo innanzitutto a vedere come avere accesso agli emulatori; per quanto riguarda quello android possiamo andare direttamente a scaricarlo dall’indirizzo https://www.microsoft.com/en-us/download/details.aspx?id=100847 dove potremo scegliere il pacchetto per il sistema operativo che stiamo utilizzando, mentre per quanto riguarda quello per windows 10X non dobbiamo far altro che andare nello store di window 10 e cercare il Windows Emulator che una volta installato ci permetterà di scegliere al primo avvio quale versione del sistema operativo vogliamo andare ad installare. Finalmente dall’ultimo aggiornamento del programma è possibile installarlo anche su una normale versione di windows senza dover per forza essere sul ramo Insider di Windows 10.

In questo momento sono disponibili due versioni del sistema operativo (naturalmente in preview) ma quando saranno rilasciate potrete installare sempre da questa schermata eventuali nuove versioni disponibili che potremo anche far coesistere.

Come sviluppare

Ok adesso che abbiamo gli emulatori il passo successivo è sapere quale tecnologia è possibile utilizzare per inziare a svilupparci. Come al solito non esiste un solo modo di farlo ma al momento il consiglio che mi sento di darvi se volete sviluppare per questi dispositivi è di utilizzare Xamarin Forms in modo da avere una sola base di codice per tutte le piattaforme, ma oltre questo sono disponibili anche gli SDK per

  • UWP
  • Xamarin nativo Android
  • Android nativo

La prima cosa che balza all’occhio è che non è presente l’SDK per ios, questo naturalmente perchè (per ora) non c’è un dispositivo targato Apple che abbia il supporto al dual screen, questo vuol dire che se stiamo sviluppando nativamente non ne abbiamo bisogno, mentre se usiamo Xamarin Forms ci penserà comunque la libreria a gestire il tutto

Cosa mi permette di fare l’sdk?

L’sdk ci permette di gestire vari scenari, naturalmente non sarà obbligatorio utilizzare in ogni sezione della nostra applicazione lo stesso tipo di scenario, ne limitarci a quelli indicati ma possiamo utilizzare quello migliore in ogni situazione.

Vediamo nel dettaglio quali sono i principali scenari a cui possiamo far riferimento

layout

Extended canvas

E’ la modalità più tradizione e permette di estendere il contenuto della nostra applicazione sui due schermi senza applicare nessuna modifica particolare.

Master detail

Una delle situazioni più comuni in cui ci trova è quella in cui abbiamo una lista di elementi (dalle fatture alle immagini ad es) che una volta selezionate ci permettono di accedere ad un dettaglio dello stesso. Avendo questa visualizzazione su due schermi potremmo accedere in modo più veloce alla selezione di un elemento senza dover tornare indietro per accedere di nuovo alla lista.

Two page

La modalità a due pagine è quella più indicata quando visualizziamo del contenuto impaginato, questo ci permetterà di simulare nel modo migliore l’utilizzo di un libro o di un documento in cui il contenuto viene disposto in modo ordinato e diviso tra le due pagine

Dual view

La doppia vista ci permette di poter presentare i dati all’utente in due modalità diverse, come ad esempio un’elenco di luoghi e la visualizzazione degli stessi su una mappa oppure due immagini quando stiamo eseguendo delle modifiche.

Companion panel

la modalità companion è quella forse più interessante che ci permette di fornire maggiori controlli all’utente che altrimenti non avrebbero spazio per essere visualizzati, come può essere ad esempio un joypad che potrebbe essere presente sul secondo schermo quando si utilizzata un gioco oppure dei controlli aggiuntivi di modifica di un elemento che invece di essere presentati in una schermata a parte possono essere visualizzati contemporaneamente all’oggetto che si stà modificando. Decisamente comoda come funzionalità!

Perchè dovrei iniziare ad utilizzarlo?

Arriviamo adesso alla domanda che tutti vi starete facendo, se ancora questi dispositivi non sono sul mercato perchè dovrei perdere tempo a rendere le mie applicazioni compatibili?

Naturalmente perchè se stai leggendo questo articolo sarai un nerd o un amante della tecnologia e questo dovrebbe bastare come giustificazione, ma se proprio c’è bisogno di una motivazione sappiate che quando usciranno questi nuovi device le vostre app saranno una gioia per gli utenti.

Ma non finisce qui, una cosa molto interessante è che utilizzare queste libreria ci permetterà di ottenere dei benefici anche quando le nostre app verranno utilizzata su device che non sono dual screen, questo perchè quando andremo ad utilizzare il componente di gestione delle pagine TwoPaneView potremmo andare a definire una MinWideModeWidth e  una MinTallModeHeight che ci permetteranno di “simulare” i due schermi quando il nostro dispositivo supera una certa larghezza o altezza, questo permetterà alle nostre app di entrare in una delle modalità viste in precedenza e di sfruttare al meglio la dimensione dello schermo.

In questo modo modo le nostre app diventaranno automaticamente ottimizzate su device con una ampia diagonale come ad esempio i tablet android o i pieghevoli,i convertibili 2 in 1 ed anche gli ipad (ma non avevamo detto che non c’è l’sdk per Ios? si ma c’è per xamarin forms 😀 ). Quante volte le vostra applicazioni sono ben gestite se le provate su un telefono mentre poi quando vengono utilizzate su un tablet  in modalità orizzontale l’utente si trova di fronte ad un’interfaccia che “affoga” schermo? Utilizzando l’sdk per dual screen avremo quindi gratis anche questa funzionalità

Direi che a questo punto non avete scuse per non utilizzarlo 😀

I prossimi articoli

In questo articolo abbiamo sollevato il velo su quello che è il mondo dello sviluppo su dispositivi con più di uno schermo, a questo ne seguiranno altri in cui vedremo come sviluppare utilizzando sia la piattaforma UWP che Xamarin Forms in attesa di avere tra le mani questi nuovi dispositivi 😀

Per adesso quindi non mi resta altro che darvi appuntamento al prossimo articolo e augurarvi buon coding!!

 

Lavoro da casa, qualche semplice regola da chi lo fà da anni

Ormai sono più di 10 anni che lavoro principalmente da casa e penso che la mia esperienza possa essere utile a qualcuno adesso che molti sono costretti a doverlo fare senza poterlo scegliere.

Partiamo dal presupposto che non tutti sono portati per lavorare da casa, io sinceramente mi ci trovo molto bene, lo faccio da anni e non tornerei indietro ma conosco molte persone che non riescono proprio a farlo a che dopo qualche giorno entrano in confusione.

In questi anni ho modificato di molto il mio modo di lavorare e penso di aver individuato alcuni punti che potrebbero aiutare anche voi

Createvi una routine. Avere degli orari fissi a cui svegliarsi, iniziare a lavorare e soprattutto finire di lavorare è fondamentale. Essere elastici è normale per adattarsi a varie esigenze giornaliere ma non bisogna finire sempre a lavorare fino a tarda notte tutti i giorni.

Conosci te stesso e come reagisci nei vari momenti della giornata. Non tutti siamo uguali, c’è chi è produttivo di mattina o chi come me lo è più di pomeriggio, cercate di sfruttare al massimo il periodo in cui siete più produttivi

Ritagliatevi un proprio spazio riconosciuto da tutti. E’ importante avere un posto che possa essere identificato da tutti come il vostro posto di lavoro, poco conta che sia una stanza o un’angolo della vostra camera da letto, è importante che tutti sappiamo che quando siamo in quel posto stiamo lavorando

Datevi degli orari. Darsi degli orari è importante, non solo identificare quando si inizia e si finisce di lavorare, ma anche mettere in conto la pausa caffè, e anche qualche minuto per staccare un’attimo come quando facevate una chiacchiera in ufficio. Queste piccole accortezze sono fondamentali per evitare di arrivare sfiniti

Staccate a pranzo. Può sembrare una cosa inutile ma anche il momento del pranzo è importante per staccare e recuperare un pò di testa. Se abbiamo poi la fortuna di poter pranzare con la famiglia approfittate di quell’oretta per stare con loro. Io personalmente in questi momenti lascio da parte anche il telefono, a meno che non facciate un lavoro con urgenze, richiametete voi una volta finito il pranzo.

Cambiatevi e preparatevi come se doveste uscire. Può sembrare una cosa inutile ma è importante per il nostro cervello capire che non siamo più in uni stato di riposo, quindi assolutamente NO al pigiama. Pettinatevi, sbarbatevi, come se doveste fare una call al giorno o incontrarvi con i vostri colleghi

Il fine settimana è diverso dal resto della settimana.

Cercate di stare comodi. Una sedia comoda,un piano rialzato anche se in modo artigianale possono fare la differenza, cosi come un mouse o un monitor esterno. Investiste qualcosa in questo momento di sicuro ve lo ritroverete in altre situazioni. Niente è peggio di iniziare ad avere fastidi dopo qualche ora

Condividete i vostri progressi.

Freelanz, una nuova app per i freelance

Dopo quasi più di un paio di anni in cui non pubblicavo nessuna applicazione personale nei vari store (ma questo non vuol dire che nel frattempo non ne ho sviluppate per lavoro 😀 ) ho finalmente trovato il tempo di svilupparne una per noi freelance.

Sono arrivato ad un punto in cui non riuscivo più a tenere traccia corretamente del lavoro che svolgevo e utilizzando ogni cliente un proprio metodo ero arrivato alla fine a farmi un buon vecchio foglio Excel per tenere traccia degli sviluppi.

E’ inutile dire che la situazione oramai mi era stretta, ho quindi deciso di sviluppare ( naturalmente in Xamarin ) una applicazione che mi permettesse di avere quello di cui avevo bisogno, alla fine le migliori applicazioni non nascono proprio per questo motivo? 😀

Finalmente sono riuscito a pubblicarne una prima versione nello store per ora Android ma essendo Xamarin non ci sarà nessun problema a pubblicarla anche negli altri store.

Questa applicazione sarà anche il mio punto di partenza per fare i test sui nuovi device che Microsoft stà mettendo a punto come il Surface Duo e Neo, ma di questo parleremo a breve in un’altro post

Se volete avere maggiori dettagli sull’applicazione potete andare nella pagina dedicata in questo blog che trovate QUI

Naturalmente come sempre sono aperto a qualsiasi suggerimento, quindi se avete idee o consigli fatevi avanti!

Come sempre buon coding!!

 

A volte ritornano…

E’ passato più di un’anno dall’ultimo articolo pubblicato su questo Blog.

La vita è strana ed a volte ci sono dei periodi in cui ti ritrovi ad essere sopraffatto dagli eventi e a non trovare il tempo per quello che vorresti fare.

Questo anno è volato tra la nascita del terzo figlio e tutto un susseguirsi di giri di clienti, senza contare i tanti eventi community a cui ho partecipato sia come speaker che come partecipante.

Ma per fortuna le cose cambiano sempre e finalmente è tempo di ripartire anche con questa avventura. Mi è sempre piaciuto spendere un pò del mio tempo condividendo su questo blog (oltre che farlo alle sessioni degli eventi) un pò di quello che sò perchè magari può essere utile a qualcuno, e quindi a breve ci saranno altri post con molte novità e nuovi argomenti che spero vi interesseranno.

Le idee che ho in mente sono molte, ma per ora preferisco non spoilerare (come è di moda dire in questo periodo) niente 😀

Quindi per ora non mi resta da fare altro che augurarvi buon coding e darvi appuntamento a breve su queste pagine 😉

Benvenuto XAML Studio

Da pochi giorni è disponibile sullo store di Windows 10 un nuovo applicativo sviluppato da Microsoft Garage che permette di realizzare in modo molto veloce prototipi di applicazioni UWP permettendoci di avere una preview in tempo reale di quello che stiamo sviluppando.

Quello che vedete nella foto in basso è l’interfaccia del programma che in maniera molto intuitiva mette a disposizione un editor con 2 aree: una dove inserire il nostro codice e una dove vedere la preview interattiva, questo vuol dire che se inseriremo un elemento interattivo (ad es una textbox) potremo interagire con essa direttamente dalla preview.

Nonostante l’applicazione sia molto giovane ha già molte funzionalità interessanti tra cui:

  • Preview in tempo reale
  • Intellisense
  • binding da testo json o con download direttamente da url
  • documentation toolbox

la funzionalità di documentation toolbox in particolare risulta essere molto comoda in fase di apprendimento, in quanto permette di accedere direttamente alla documentazione dei vari componenti dove poter trovare i vari pezzi di codice da poter incollare direttamente nel tool per provarli

A questo punto non vi resta da fare altro che scaricarlo dallo store a questo indirizzo https://aka.ms/GetXAMLStudio ed iniziare ad utilizzarlo.

Il programma è molto interessante quindi sicuramente ci saranno altri post su questo argomento, per il momento non mi resta da fare altro che augurarvi buon coding!

Utilizzare edge come motore web nelle app win32

Uno dei componenti più utilizzato all’interno delle nostre app Win32 è il controllo WebView che permette di visualizzare dati html all’interno di essi.

Il problema di questo componente è che utilizza come motore di rendering Internet Explorer che su windows 10 è ormai stato sostituito da Edge, in questo articolo vedremo come utilizzare Edge come  componente webview grazie alle nuove funzionalità aggiunte nelle ultime versioni del Windows Community Toolkit.

Il primo passo sarà creare un progetto di tipo Windows Forms App.

Fatto questo dovremo proseguire andando ad aggiungere il pacchetto nuget Microsoft.Toolkit.Win32.UI.Controls al nostro progetto

Fatto questo dovremo andare ad aggiungere il nostro componente alla Toolbox per poterlo utilizzare, dovremo quindi andare nella toobox, fare tasto destro e selezionare choose items. Fatto questo nella sezione dei componenti del Framework .net possiamo andare ad aggiungere il componente andando a cercare il file Microsoft.Toolkit.Win32.UI.Controls.dll della cache di nuget che che si trova nella directory %userprofile%\.nuget\packages che ad esempio sul mio pc corrisponde alla cartella

C:\Users\NomeUser\.nuget\packages\microsoft.toolkit.win32.ui.controls\3.0.0\lib\net462

fatto questo avremo il nostro controllo webview che potremo trascinare nella nostra form per utilizzarlo.

Per vedere l’effettiva differenza possiamo affiancare il nuovo controllo WebView al vecchio WebBrowser e vedere andanda sulla pagina di test http://html5test.com/ come effettivamente stiamo utilizzando edge al posto del vecchio Internet Explorer

edgewin32

Adesso non avete più scusa per non aggiornare le vostre app 😀

Buon Coding!!!

Problemi con Visual Studio 15.8 e la chiusura delle parentesi graffe? Ecco come risolvere

Se avete installato l’aggiornamento di Visual Studio 15.8 ed utilizzate una tastiera QWERTY avrete notato l’impossibilità di chiudere le parentesi graffe nell’editor tramite la scorciatoia ALT GR-SHIFT-] questo perchè il comando è stato rimappato per la selezione del blocco di codice corrente, per risolvere il problema e ritornare alla situazione precedente dobbiamo eliminare la scorciatoia relativa in questo modo

  • Andiamo nel menu Tool->Options
  • Rechiamoci nel menu Environment-> Keyboard
  • Cerchiamo la combinazione Edit.ExpandSelectiontoContainingBlock
  • Utilizziamo il tasto Remove per rimuovere la scorciatoia corrente
  • Ia nostra combinazione funzionerà di nuovo

vs158

Adesso non abbiamo più scuse per non aggiornare all’ultima versione di Visual Studio, quindi buon coding!!

Fonte: https://developercommunity.visualstudio.com/content/problem/289516/cannot-type-close-brace.html

How to fix error loading onnx file from filesystem

The default use of trained machine learning model in UWP apps is to add onnx file to your solution and leave Visual Studio to generate the corresponding class and load the file directly in the solution, but in some case can be useful to load the file from other sources, like the filesystem.

This is not a problem, the CreateXXXXXModel generate take a StorageFile so you can use a FilePicker to take a file, but if you try a code like this

FileOpenPicker fileOpenPicker = new FileOpenPicker();
fileOpenPicker.FileTypeFilter.Add(".onnx");
StorageFile selectedStorageFile = await fileOpenPicker.PickSingleFileAsync();
try
{
	_model = await CustomVisionModel.CreateCustomVisionModel(selectedStorageFile);
}catch(Exception ex)
{
	new MessageDialog(ex.StackTrace,ex.Message).ShowAsync();
}

You can see that an exception is thown in the calling of method LearningModelPreview.LoadModelFromStorageFileAsync in the generated class

public static async Task CreateCustomVisionModel(StorageFile file)
{
	LearningModelPreview learningModel = await LearningModelPreview.LoadModelFromStorageFileAsync(file);
	CustomVisionModel model = new CustomVisionModel();
	model.learningModel = learningModel;
	return model;
}

The exception does not give us more info about the problem

Exception from HRESULT: 0x88900103
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at WinMLTester.CustomVisionModel.d__1.MoveNext()
— End of stack trace from previous location where exception was thrown —
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at WinMLTester.Views.MainPage.d__6.MoveNext()

it seems that file doesn’t have some permission for made WinML works, the solution is quite simple, before creating the model we need to copy the file in the app local folder and then use this file instead of the other.

We need only few lines of codes for do this

FileOpenPicker fileOpenPicker = new FileOpenPicker(); 
fileOpenPicker.FileTypeFilter.Add(".onnx"); 
StorageFile selectedStorageFile = await fileOpenPicker.PickSingleFileAsync(); 
//Fix for loading file
StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
StorageFile sf2 = await selectedStorageFile.CopyAsync(storageFolder, selectedStorageFile.Name, NameCollisionOption.ReplaceExisting);
try
{
	_model = await CustomVisionModel.CreateCustomVisionModel(sf2);
}catch(Exception ex)
{
	new MessageDialog(ex.StackTrace,ex.Message);
}

Now your code work without problem

I have also created a new project on github for help to test your machine learning model created with Custom Vision service available on https://github.com/a-iafrate/WinMLTester that can be used to test this fix

happy 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