Skip to main content

Windows 10: cosa cambia rispetto a Windows 7 e a Windows XP

Tra la fine del grace period offerto da Microsoft per l’aggiornamento gratuito a Windows 10 e l’uscita del nuovissimo Anniversary Update (leggi qui per un elenco delle nuove funzionalità offerte e qui per le istruzioni su come ottenerlo), questo mese ha visto moltissimi utenti aggiornare il proprio sistema operativo passando da una precedente versione di Windows all’ultimogenito di casa Microsoft. Si tratta certamente di una buona scelta: Windows 10, a un anno dalla sua uscita ufficiale, si è dimostrato essere un sistema estremamente valido sotto il profilo della sicurezza, dell’efficienza energetica, delle performance e dell’affidabilità.

Nonostante questo, sono in molti – specialmente gli utenti meno esperti – a trovarsi spaesati con i cambiamenti introdotti dalla nuova interfaccia, che riguardano soprattutto la nuova concezione del Menu Start e del pannello semplificato per gestire le impostazioni del sistema: due innovazioni che si spiegano con la volontà, da parte degli sviluppatori Microsoft, di adottare un approccio mobile-friendly nell’ottica di realizzare un OS unificato per tutti i suoi dispositivi – mobili, portatili, trasportabili e non. Per questo motivo abbiamo pensato di scrivere un breve “prontuario” che elenca tutti i principali cambiamenti con cui l’utente abituato a utilizzare Windows 7 dovrà cimentarsi in conseguenza dell’upgrade.

UPDATE: A grande richiesta, abbiamo realizzato anche una versione stampabile in formato PDF di questa guida.

Introduzione

Questa breve guida è stata realizzata con l’obiettivo di fornire al lettore una breve panoramica sulle principali novità di Windows 10 rispetto alle versioni precedenti, in particolare Windows 7 e Windows XP.

Menu Start

Il menu Start di Windows 10 è richiamabile, così come in Windows 7, cliccando sul pulsante in basso a sinistra nella barra delle applicazioni con il simbolo di Windows.

All’interno del Menu Start sono presenti una serie di “piastrelle” (tiles) che possono a loro volta contenere informazioni prodotte da servizi o provenienti dal web. Si tratta di una novità che proviene da quella che una volta era nota come interfaccia Metro di Windows 8 e che poi è stata rinominata in interfaccia per le applicazioni in Windows 10.

Diversamente rispetto a quanto accade in Windows 7, il Menu Start di Windows 10 è liberamente personalizzabile nelle dimensioni e nei contenuti. Ad esempio, è possibile:

  • Cliccando con il tasto destro su qualsiasi collegamento (ad esempio sul Desktop) e selezionando Aggiungi a Start è possibile aggiungerlo al Menu Start.
  • Cliccando con il tasto destro su una piastrella e selezionando Rimuovi da Start è possibile eliminarla.
  • Cliccando con il tasto destro su una piastrella e selezionando Ridimensiona è possibile ridimensionarla.

Barra delle Applicazioni

La barra delle applicazioni è molto simile a quella di Windows 7 ma è anch’essa diventata interamente personalizzabile, così come il Menu Start. Tutto ciò che è valido per il Menu Start può essere effettuato anche per la barra delle applicazioni, selezionando Aggiungi a Barra delle Applicazioni, Rimuovi da Barra delle Applicazioni e così via.

Pannello di Controllo

In Windows 10 molte delle funzioni accessibili tramite lo storico Pannello di controllo sono state duplicate e proposte, in versione semplificata, nel nuovo pannello Impostazioni, accessibile dal Menu Start. E’ comunque ancora possibile utilizzare il Pannello di Controllo, accessibile cliccando con il tasto destro sull’icona Start (in basso a sinistra) e selezionando Pannello di Controllo.

Strumento di ricerca interno (CORTANA)

Rispetto a Windows 7 ha acquisito molta importanza lo strumento di ricerca interno, che è stato dotato di nuove funzionalità ed è accessibile tramite l’icona Lente di Ingrandimento in basso a sinistra. Il suo utilizzo più frequente è per cercare le applicazioni, risparmiando tempo prezioso: è sufficiente digitare il nome o parte del nome per visualizzare le icone corrispondenti.

Edge al posto di Internet Explorer

Un altro importante cambiamento è dato dalla nuova versione del browser di casa Microsoft, denominato Edge, che sostituisce il vecchio Internet Explorer offrendo un’esperienza di navigazione migliore, più simile ai moderni browser di terze parti come ad esempio Google Chrome.

Principali vantaggi

Segue un elenco non esaustivo dei principali vantaggi che offre l’aggiornamento a Windows 10:

  • Prestazioni migliori. Windows 10 presenta notevoli ottimizzazioni che consentono un incremento di performance sia per hardware di nuova generazione (es. i PC di tipo NUC) che per l’hardware più datato.
  • Gestione più efficiente dell’hardware e dell’energia. Le caratteristiche legate al risparmio energetico sono state riviste per garantire una efficienza maggiore, che si traduce in: tempi di risposta più rapidi in fase di accensione/spegnimento, consumo più intelligente dell’hardware, maggiore affidabilità delle modalità stand-by e sospensione, et. al.
  • Supporto prolungato da parte di Microsoft. Tutte le versioni dei sistemi operativi Microsoft prevedono due tipologie di supporto: il Mainstream Support (fino a 5 anni dal rilascio) e l’Extended Support (fino a 10 anni dal rilascio). Nel caso di Windows 7, il Mainstream Support è cessato il 1 gennaio 2015, mentre il termine dell’Extended Support è previsto per il 1 gennaio 2020. Nel caso di Windows 10, che è stato ufficialmente rilasciato il 13 ottobre 2015, le date sono rispettivamente 13 ottobre 2020 e 13 ottobre 2025.
  • Maggiore compatibilità hardware con le moderne tecnologie (USB 3.0, SerialAta3, PCI-Express M.2) et. al.
  • Maggiore compatibilità software con gli applicativi moderni.
  • Maggiore sicurezza online e offline.
  • Maggiore stabilità grazie alla micro-virtualizzazione.

Principali Svantaggi

Segue un elenco non esaustivo delle principali problematiche note che potrebbero verificarsi a seguito dell’aggiornamento di Windows 10:

  • Problemi di retrocompatibilità hardware per periferiche e dispositivi vecchi o obsoleti (stampanti, vecchi cellulari, dispositivi USB 2.0 come smartphone e tablet) e relativi driver.
  • Problemi di retrocompatibilità software per applicativi vecchi, obsoleti e non aggiornati (vecchie versioni di AlterEgo, software di contabilità, software realizzato o sviluppato ad-hoc, et. al.)
  • Problemi di abitudine legati alla nuova interfaccia utente (ricerca delle applicazioni installate, disinstallazione delle applicazioni, etc.).
 

ASP.NET MVC: 4 modi per rendere una proprietà del ViewBag disponibile in tutte le View

Quando si ha a che fare con siti che prevedono un gran numero di View capita spesso di trovarsi a inserire ripetutamente alcune variabili nell’oggetto ViewBag di ciascuna di esse. Alcuni esempi tra i più ricorrenti, per lo meno nei miei progetti, sono i classici IsAdmin, IsAuthenticated, AvatarURL e così via. In questo tipo di situazioni, onde evitare di scrivere ripetutamente lo stesso codice, è consigliabile adottare un metodo che consenta di inserire queste variabili nel ViewBag di tutte le viste in modo centralizzato. Gli approcci che vanno per la maggiore per ottenere questo risultato sono i seguenti:

1. Utilizzare una Base Class.

PRO: Semplice da implementare, efficace, centralizzato (fin troppo).
CONTRO: Costringe a derivare tutti i controller dalla base class, il che può risultare sconveniente se si ha a che fare con un gran numero di controller già esistenti e/o basati su classi base non modificabili.

 

2. Utilizzare un Module.

PRO: Nessuno in particolare.
CONTRO: Nessuno in particolare (a parte una scarsa intuitività del metodo).

 

3. Impostare la proprietà in fase di RegisterController

PRO: Ideale per un design pattern basato su IoC.
CONTRO: Non ha molto senso in tutti gli altri casi.

 

4. Utilizzare un ActionFilter e registrarlo in fase di Global.asax / Application_Start.

PRO: E’ il metodo meno invasivo (e più versatile) tra quelli proposti.
CONTRO: Nessuno in particolare.

Come sempre, la soluzione preferibile varia a seconda delle caratteristiche del progetto e delle necessità dello sviluppatore: ciò detto, la mia preferita è senz’altro la quarta per i motivi espressi.

E la vostra?

 

ASP.NET: Creare un sito web MVC5 con Database MySQL, Entity Framework 6 Code-First e Visual Studio 2013

Le nuove potenzialità di EF6 consentono di creare un sito web e relativo data model con poche righe di codice. Sul web esistono numerose guide che illustrano come fare utilizzando SQL Express, ma chi sceglie di utilizzare MySQL troverà senz’altro molto meno materiale. Questa semplice guida risponde a quanti mi hanno chiesto di riassumere i passaggi fondamentali per creare una applicazione web MVC5 configurando EF6 CF con MySQL. Per i primi passaggi mi limiterò a tradurre l’ottimo articolo Getting started with Entity Framework 6 Code First using MVC5 presente sul sito www.asp.net, dal quale prenderò anche alcune immagini a scopo divulgativo.

Questi gli strumenti di cui avremo bisogno (e relativi link alle versioni scaricabili gratuitamente):

Step 1. Creazione di una Web Application

Apriamo Visual Studio 2013 e creiamo un nuovo progetto C# in questo modo:

NP

Nella schermata successiva selezioniamo il template MVC, quindi clicchiamo sul bottone Change Authentication… per decidere se abilitare o meno l’autenticazione utente a seconda delle necessità del sito che vogliamo creare. Nell’esempio che vogliamo fare non ne abbiamo bisogno, quindi possiamo scegliere No Authentication.

CA

Completiamo quindi i passaggi necessari per ultimare la creazione del sito.

Step 2. Installazione di Entity Framework 6

Dal menu Tools (Strumenti, se avete la versione in italiano) selezioniamo Library Package Manager e poi Package Manager Console. Nella console che si aprirà digitiamo il comando seguente:

NuGet si occuperà di installare la versione più recente di Entity Framework (al momento è la 6.1.1). Una volta fatto questo possiamo cominciare a creare le nostre Entities seguendo l’approccio code-first.

Step 3. Creazione delle Entities

Una Entity non è altro che una classe pensata per contenere tutte le informazioni relative a un singolo elemento del nostro Database: prima di creare una o più Entities è quindi necessario avere una idea piuttosto chiara degli elementi di cui avremo bisogno e delle relazioni tra gli stessi che andremo ad impostare. Prendiamo come esempio il più classico degli archivi:

  • un elenco di studenti (Student)
  • che effettuano una o più iscrizioni (Enrollment)
  • a un elenco di corsi (Course).

Spostiamoci quindi all’interno della directory /Models/ (creandola se non esiste) e creiamo le seguenti tre classi:

Step 4. Creazione del Database Context

La classe principale che si occupa di tenere insieme le funzionalità dell’Entity Framework è nota come Database Context. Per crearla è sufficiente estendere la classe di sistema System.Data.Entity.DbContext specificando le Entities da includere nel Data Model. Creiamo quindi una cartella /DAL/ (che sta per Data Access Layer) e aggiungiamo le due classi seguenti:

 

Come si può vedere la classe MyDbContext.cs contiene un DbSet per ogni Entity creata in precedenza. Questo perché, secondo quanto previsto da Entity Framework, a ciascun DbSet corrisponderà una Tabella del nostro Database: le Entities, ovviamente, rappresenteranno le singole righe. Notiamo anche che nel costruttore viene impostato un oggetto di tipo MyDbInitializer, specificato nella classe successiva, che serve a creare il database nel caso in cui non esista e ad inserire tre record di esempio nella tabella Student che verrà creata. E’ possibile derivare il MyDbInitializer da numerose possibili classi di inizializzazione predefinite, come ad esempio:

  1. CreateDatabaseIfNotExists: E’ l’initializer predefinito: come suggerisce il nome, crea il database se questo non esiste: nel caso in cui il modello venga cambiato in modo da non coincidere più con il database esistente questo inizialier lancerà una eccezione. Questo comportamento lo rende ideale per gli ambienti di produzione, meno per gli ambienti di sviluppo dove il Database Model cambia di frequente.
  2. DropCreateDatabaseIfModelChanges: Questo initializer crea un nuovo database, eliminando quello eventualmente già esistente, se una o più classi relative alle Entities risultano modificate rispetto all’ultima inizializzazione. Questo comportamento lo rende ideale per gli ambienti di sviluppo, dove non è solitamente importante mantenere i dati nel DB: è sconsigliato per gli ambienti di produzione in quanto il rischio di data loss è elevato (basta un minimo aggiornamento a una classe Entity per perdere tutto l’archivio).
  3. DropCreateDatabaseAlways: Come suggerisce il nome, questo initializer elimina e ricrea il database ad ogni inizializzazione, ovvero ad ogni avvio dell’applicazione web. Il suo comportamento lo rende ideale per quegli ambienti di sviluppo che necessitano di un refresh continuo dei dati nel database: è ovviamente sconsigliato per gli ambienti di produzione.

IMPORTANTE: come si evince da questo commento, sembra che alcune versioni di Entity Framework richiedano l’utilizzo dell’inizializer DropCreateDatabaseAlways invece di CreateDatabaseIfNotExists quando il metodo sopra descritto viene utilizzato per inizializzare le Migration per la prima volta: in caso contrario, la tabella  _MigrationHistory non verrà creata e alcune cose non funzioneranno, come ad esempio il metodo Seed(). Una volta inizializzate le Migration, sarà possibile passare a un initializer diverso (CreateDatabaseIfNotExistsDropCreateDatabaseIfModelChanges) senza alcun problema.

Notiamo infine che il costruttore della nostra classe contiene un riferimento a una MyDbContextConnectionString che avremo cura di definire nel nostro Web.Config nel corso del prossimo step.

 

Step 5. Collegamento con MySQL

Per collegare la nostra web application al database MySQ abbiamo bisogno del MySQL Connector.NET, scaricabile gratuitamente dal sito web ufficiale oppure tramite NuGet. Una volta collegate le librerie al progetto avremo cura di aggiungere al Web.Config della nostra applicazione una stringa di connessione valida, completa di username e password, in questo modo:

 

Step 6. Avvio dell’applicazione e creazione del Database

Se tutti i passaggi sono stati eseguiti correttamente, l’applicazione provvederà a creare automaticamente il database non appena verrà istanziato un oggetto di tipo MyDbContext.

Questo tipo di inizializzazione può avvenire all’interno di un qualsiasi Controller oppure nel Global.asax sotto forma di proprietà statica centralizzata o in qualsiasi altro punto dell’applicazione, a seconda delle necessità dello sviluppatore e/o del design pattern e/o di eventuali strategie di IoC / UoW adottate. Nel corso di articoli successivi provvederò a fornire esempi più su queste tecniche, sull’utilizzo delle Data Migrations e sulle molte altre potenzialità dell’Entity Framework.