Blog Stats

  • Blogs - 40
  • Posts - 3921
  • Articles - 185
  • Comments - 25847
  • Trackbacks - 934

Bloggers (posts, last update)

Powered By:
Powered by Subtext

Latest Posts

Usare Sql Server CLR Types in un web site su Windows Azure

Se vi dovesse capitare di realizzare un'applicazione web (ASP.NET o MVC) che utilizza i Sql Server CLR Type (ad esempio SqlGeography) e pubblicarla su un Web Site di Windows Azure bisogna tenere in cosiderazione alcune cose durante il deploy per non rischiare di incappare in un errore di questo tipo:

Il motivo è che manca proprio la dll SqlServerSpatial110.dll, utilizzata dall'assembly Microsoft.SqlServer.Types che è già presente nel proprio ambiente di sviluppo se si è installata una qualsiasi versione di SQL Server.

Volendo fare il deploy su un Web Site di Windows Azure ecco come procedere sfruttando il Publishing automatico:

1) Aggiungere la dll SqlServerSpatial come reference non è possibile perchè si tratta di una libreria nativa (non managed) quindi bisogna aggiugerla come un normale file al progetto.
Dunque, aggiungiamo la dll dal menu contestuale Add --> Existing Items.., puntare alla cartella C:\Windows\SysWOW64\ (questo è importante perchè su Azure tutto gira a 64 bit) e selezionare SqlServerSpatial110.dll

 

2) Perchè venga fatto il deploy nella cartella \bin dell'applicazione, impostare la proprietà Copy To Output Directory a Copy always:

3) Impostare la proprietà Copy Local a True dell'assembly Microsoft.SqlServerTypes perchè anch'esso sia copiata nella cartella \bin:

 

 

 

Ora possiamo fare il deploy utilizzando il file di publishing scaricabile direttamente dal pannello del Web Sites:

Se SQL server non è nstallato sul pc di sviluppo, è possibile recuperare questi file dal Feature Pack per Sql Server 2012, scaricabile da qui.

posted @ 10/05/2013 11:40 by Antonio "tdj" Catucci

WinRT: cattura di video e audio con la Webcam

Nel post precedente abbiamo visto come, con poche righe di codice, sia possibile catturare immagini con la Webcam e salvarle su disco nelle applicazioni per Windows 8.

La classe CameraCaptureUI, già descritta, permette di catturare anche video con un procedimento sintattico molto simile.

Ipotizziamo di avere un controllo MediaElement, che andrà a rappresentare il video una volta catturato:

        <MediaElement Name="Media1" />

Ora consideriamo il seguente codice:

    'Richiede le seguenti direttive:
    'Imports Windows.Storage.Streams
    'Imports Windows.Media.Capture
    'Imports Windows.Storage
    Dim stream As IRandomAccessStream
 
    Private Async Function CaptureVideo() As Task
        Dim camera As New CameraCaptureUI
        'Imposta il formato video
        'Il default è Mp4, alternativa è .Wmv
        camera.VideoSettings.Format = CameraCaptureUIVideoFormat.Mp4
 
        'E' possibile, ma non obbligatorio, impostare la durata max del video
        camera.VideoSettings.MaxDurationInSeconds = 20
 
        'Se la imposto, devo consentire per forza il trimming
        camera.VideoSettings.AllowTrimming = True
 
 
        Try
            'Catturo il video, che viene salvato su disco nello spazio dell'app
            Dim file As StorageFile = Await camera.CaptureFileAsync(CameraCaptureUIMode.Video)
 
            If file IsNot Nothing Then
                Me.stream = Await file.OpenAsync(FileAccessMode.Read)
 
                Me.Media1.SetSource(Me.stream, file.ContentType)
 
            End If
        Catch ex As Exception
 
        End Try
    End Function
 
    'Poichè sto riproducendo il video nel MediaElement,
    'non posso fare il Dispose dello stream prima. Quindi, lo
    'faccio nell'evento Opened del MediaElement
    Private Sub Media1_MediaOpened(sender As Object, e As RoutedEventArgsHandles Media1.MediaOpened
        Me.stream.Dispose()
    End Sub

Come vedete l'utilizzo è abbastanza simile a quanto abbiamo visto per le foto. Diciamo che:

  • bisogna abilitare entrambe le capability Webcam e Microphone. Questo perché la cattura video può prevedere anche l'audio.
  • La proprietà VideoSettings permette di gestire le impostazioni del video
  • il formato predefinito di cattura è l'Mp4 ma si può scegliere anche il Wmv
  • facoltativamente si può specificare un tempo max di durata per il video (MaxDurationInSeconds). E' importante specificare che questo valore non limita la cattura, ma limita la lunghezza del video dopo che l'utente ha eseguito il ritaglio (trimming) che a questo punto diventa obbligatorio
  • Il trimming è facoltativo solamente se la durata del video non ha limite.

E' anche possibile, poi, salvare il video altrove o con un altro nome partendo dal riferimento del file ottenuto, come abbiamo fatto la volta scorsa per le foto.

Alessandro

posted @ 09/05/2013 12:20 by Alessandro Del Sole

WinRT: cattura di immagini con la Webcam

L'interazione con il dispositivo e le sue periferiche multimediali è alla base di Windows 8 e il Windows Runtime offre delle interessanti API per catturare immagini e video dalla Webcam e dal microfono in modo molto semplice.

Si interagisce col namespace Windows.Media.Capture. Questo namespace mette a disposizione due interessanti classi, CameraCaptureUI e CaptureElement.

In questo post vedremo la CameraCaptureUI per la cattura di foto, dal momento che è la classe di più semplice utilizzo e immediate comprensione.

Questa classe espone un metodo asincrono chiamato CaptureFileAsync, che non solo consente di specificare la modalità di cattura (foto/video), ma anche di salvare automaticamente su disco, nello spazio riservato all'app, il contenuto catturato che poi può essere gestito come oggetto StorageFile.

Per quanto riguarda le foto in modo specifico, è possibile stabilire il formato, la qualità, funzioni a disposizione a seguito del "click" del fotografo.

Supponiamo di avere un controllo Image su una nostra pagina, definito in modo molto semplice, che conterrà il risultato della cattura:

 <Image Name="Image1" />

A livello di code-behind il seguente codice mostra come inizializzare la Webcam per la cattura di immagini in formato .Png alla più alta qualità disponibile. Al termine della cattura, il file originato dalla cattura viene spostato, con un nuovo nome basato sulla data corrente, nella cartella delle immagini:

    Private Async Function CapturePictureAsync() As Task
        Dim camera As New CameraCaptureUI
 
        'Imposta il formato. Possibilità: Jpeg, JpegXR, Png
        camera.PhotoSettings.Format = CameraCaptureUIPhotoFormat.Png
 
        'Imposta la risoluzione più alta
        camera.PhotoSettings.MaxResolution = CameraCaptureUIMaxPhotoResolution.HighestAvailable
 
        Try
            'L'enum CameraCaptureUIMode stabilisce se foto o video
            Dim file As StorageFile = Await camera.CaptureFileAsync(CameraCaptureUIMode.Photo)
            If file IsNot Nothing Then
                'Dopo la cattura, si ottiene un riferimento al file ottenuto
                Using ras As IRandomAccessStream = Await file.OpenAsync(FileAccessMode.Read)
                    'si crea una BitmapImage basata sullo stream
                    Dim source As New BitmapImage
                    source.SetSource(ras)
 
                    'che va a diventare il contenuto del controllo Image
                    Me.Image1.Source = source
                End Using
 
                'Nome file basato su data corrente
                Dim newFileName As String = "Capture_" + Date.Now.Day.ToString + _
                    Date.Now.Month.ToString + Date.Now.Year.ToString + "_" + _
                    Date.Now.Hour.ToString + Date.Now.Minute.ToString + _
                    Date.Now.Second.ToString + ".png"
 
                'Sposta il file. Si può usare CopyAsync per sola copia
                Await file.MoveAsync(KnownFolders.PicturesLibrary, newFileName)
 
            End If
        Catch ex As Exception
 
        End Try
    End Function

E' fondamentale ricordare che bisogna specificare la capability Webcam nel manifest dell'applicazione altrimenti la Webcam non verrà attivata neanche in fase di debug. Inoltre, poichè la nostra app accede alla cartella delle immagini, è necessario specificare anche la capability Picture Library.

Quando eseguite il codice, la Webcam verrà attivata e potrete impostare altre opzioni sulla qualità. A seguito del tocco sullo schermo, sarà possibile accettare, ritagliare o ri-catturare la foto:

Il ritaglio può essere gestito attraverso la proprietà PhotoSettings, che espone AllowCropping per abilitarlo o disabilitarlo, e CroppedSizeInPixels che stabilisce le dimensioni in pixel del ritaglio e CroppedAspectRatio che stabilisce il rapporto di proporzione di ritaglio.

La cattura di video avviene in modo simile, ma ne parleremo nel prossimo post.

Alessandro

posted @ 09/05/2013 11:26 by Alessandro Del Sole

WinRT: impostare da codice l'immagine dell'utente

Come sapete, in Windows 8 ciascun utente può avere un'immagine identificativa, come una fotografia. Non è una novità di Windows 8, ma in questo post vediamo come gestire la cosa da una Windows Store App.

Fate bene attenzione: ogni app può cambiare questa impostazione, ma non è detto che lo debba fare per forza. Ad esempio, ha senso che un'app di fotoritocco permetta di fare questa attività, ma un notiziario difficilmente avrà necessità di farlo. Questa piccola premessa è necessaria, oltre che per un discorso di uso dell'app, anche per delle capabilities di cui parliamo dopo.

Si usa la classe Windows.System.UserProfile.UserInformation, la quale espone 4 metodi asincroni:

  • SetAccountPictureAsync, che prende l'immagine da un oggetto StorageFile
  • SetAccountPictureFromStreamAsync, che prende l'immagine da un oggetto di tipo RandomAccessStream
  • SetAccountPicturesAsync, simile al primo ma che in un sol colpo prende un'immagine piccola, una grande e un video
  • SetAccountPicturesAsyncFromStream, come il precedente ma che prende le info da un RandomAccessStream piuttosto che da oggetti StorageFile

Il seguente codice mostra come ottenere uno StorageFile consentendo all'utente di selezionare un file su disco attraverso un FileOpenPicker e come sia possibile impostare l'immagine utente attraverso il metodo SetAccountPictureAsync:

    'Richiede le seguenti direttive:
    'Imports Windows.Storage.Pickers
    'Imports Windows.System.UserProfile
    'Imports Windows.Storage
    Private Async Function SetUserPictureAsync() As Task
        Dim openPicker As New FileOpenPicker
        openPicker.FileTypeFilter.Add(".jpg")
        openPicker.FileTypeFilter.Add(".jpeg")
 
        Dim pictureFile As StorageFile = Await openPicker.PickSingleFileAsync()
        If pictureFile IsNot Nothing Then
            Dim result As SetAccountPictureResult = Await UserInformation.SetAccountPictureAsync(pictureFile)
 
            If result = SetAccountPictureResult.Success Then
                'operazione andata a buon fine
            ElseIf result = SetAccountPictureResult.ChangeDisabled Then
                'l'utente non ha accettato la modifica
            ElseIf result = SetAccountPictureResult.FileSizeError Then
                'il file è troppo grande
            ElseIf result = SetAccountPictureResult.LargeOrDynamicError Then
                'l'immagine è troppo grande
            ElseIf result = SetAccountPictureResult.Failure Then
                'errore generico
            End If
        End If
    End Function

Si noti come sia possibile conoscere l'esito dell'operazione attraverso il risultato di tipo SetAccountPictureResult.

Affinché il codice possa essere certificato e riconosciuto correttamente dal sistema, nel manifest del Package dobbiamo specificare la dichiarazione Account Picture Provider.

Questo ha una importante conseguenza: la nostra app verrà mostrata nelle impostazioni relative all'immagine dell'account, come si vede nella seguente figura:

Ciò significa che l'utente avrà la possibilità di scegliere la nostra app come strumento per cambiare l'immagine utente e l'app stessa deve essere in grado di reagire alla selezione in questa finestra.

L'aver scelto la dichiarazione Account Picture Provider, abilita un protocollo chiamato ms-accountpictureprovider. Nel metodo OnActivated della classe App, dobbiamo capire se l'attivazione dell'app stessa avviene tramite un protocollo e, se si, se si tratta del protocollo di nostro interesse:

    Protected Overrides Sub OnActivated(args As IActivatedEventArgs)
        If args.Kind = ActivationKind.Protocol Then
 
            Dim protocolArgs = CType(args, ProtocolActivatedEventArgs)
            If protocolArgs.Uri.Scheme = "ms-accountpictureprovider" Then
                'l'utente ha richiesto di aprire l'app 
                'per modificare l'immagine dalle impostazioni PC
            End If
        End If
    End Sub

A questo punto si potrà invocare, ad esempio, il precedente codice per consentire la scelta dell'immagine da disco e impostarla.

Alessandro

posted @ 08/05/2013 13:55 by Alessandro Del Sole

WinRT: suggerire un'app per URI e file avviati da codice

Nel post precedente abbiamo visto come avviare, da codice, URI o file nelle applicazioni per Windows 8. Abbiamo visto come utilizzare i metodi LaunchUriAsync e LaunchFileAsync della classe Windows.System.Launcher.

Entrambi i metodi, in realtà, accettano un overload di tipo LauncherOptions che permettono di specificare, tra l'altro, la possibilità di mostrare il selettore di app per il tipo di contenuto che si sta aprendo.

Riprendiamo il codice del metodo che apre un'email e supponiamo di voler consentire all'utente con quale app voglia scrivere il nuovo messaggio. Lo possiamo riscrivere in questo modo:

    Private Async Function SendEmailAsync() As Task
        Dim options As New Windows.System.LauncherOptions
        With options
            .DisplayApplicationPicker = True
            .UI.InvocationPoint = New Point(100, 400)
            .UI.PreferredPlacement = Windows.UI.Popups.Placement.Above
        End With
 
        Dim mailMessageUri As New Uri("mailto:alessandro.delsole@visual-basic.it")
        'Apre il client di posta
        Dim result As Boolean = Await Windows.System.Launcher.LaunchUriAsync(mailMessageUri, options)
 
        If result = True Then
            'operazione andata a buon fine
        Else
            'operazione fallita
        End If
    End Function

L'istanza della classe LauncherOptions permette di impostare alcune proprietà:

  • DisplayApplicationPicker, che mostra il selettore delle app.
  • UI.InvocationPoint, che permette di stabilire in quale area dello schermo debba essere visualizzato il selettore.
  • UI.PreferredPlacement, che permette di stabilire, in modo relativo a InvocationPoint, se il selettore debba essere in alto, in basso, a destra o sinistra.

Di proprietà ce ne sono altre, come ad esempio FallbackUri che permette di specificare un URI alternativo se non c'è alcuna app disponibile per aprire l'URI specificato, oppure PreferredApplicationDisplayName che consiste in una stringa che consente di suggerire all'utente la migliore app da usare.

Il codice di cui sopra produce il seguente risultato, lasciando all'utente libertà di scelta:

Alessandro

posted @ 07/05/2013 22:06 by Alessandro Del Sole

WinRT: lanciare applicazioni da codice, incluse le mappe

Come in ogni contest applicativo, anche le Windows Store Apps per Windows 8 possono avere la necessità di avviare altre applicazioni, siano esse Store App o applicazioni desktop.

Nel mondo .NET classico, siamo abituati a usare Process.Start o un'istanza di Process per gestire l'avvio di applicazioni esterne.

In Windows Runtime, non è così nel senso che non possiamo lanciare applicazioni in modo arbitrario. In WinRT si lanciano gli URI, che già sapete cosa sono, per ciascuno dei quali è associato uno schema.

Ad esempio, lo schema http:// farà si che venga aperto il browser predefinito per l'URI specificato. Questo è forse scontato, ma magari non sapete che lo schema bingmaps:/// è registrato e consente l'apertura di mappe per la query string specificata.

L'avvio di app esterne avviene attraverso metodi della classe Windows.System.Launcher. Il primo metodo che consideriamo è LaunchUriAsync. Questo metodo si usa con schemi per protocolli Web, come ad esempio http:// e mailto:. Se il protocollo utilizzato è http, verrà sempre avviato il Web browser predefinito indipendentemente dal contenuto. Il seguente codice mostra un esempio di come aprire un sito Web:

    Private Async Function ViewInBrowserAsync() As Task
        Dim webSiteUri As New Uri("http://www.microsoft.com")
        Dim result As Boolean = Await Windows.System.Launcher.LaunchUriAsync(webSiteUri)
 
        If result = True Then
            'operazione andata a buon fine
        Else
            'operazione fallita
        End If
    End Function

Se invece il protocollo è mailto: verrà aperto il programma di posta elettronica predefinito (nel mio caso Outlook 2013, quindi applicazione desktop):

    Private Async Function SendEmailAsync() As Task
        Dim mailMessageUri As New Uri("mailto:alessandro.delsole[@]visual-basic.it")
        'Apre il client di posta
        Dim result As Boolean = Await Windows.System.Launcher.LaunchUriAsync(mailMessageUri)
 
        If result = True Then
            'operazione andata a buon fine
        Else
            'operazione fallita
        End If
    End Function

Molto più interessante è la possibilità di aprire l'app delle mappe di Bing, sfruttando il protocollo bingmaps:///. Il seguente codice mostra come avviare l'app delle mappe e mostrare tutti i ristoranti della città di Cremona:

    Private Async Function ShowMapAsync() As Task
        Dim mapUri As New Uri("bingmaps:///?q=ristoranti&where=cremona")
        'Apre l'app delle mappe
        Dim result As Boolean = Await Windows.System.Launcher.LaunchUriAsync(mapUri)
 
        If result = True Then
            'operazione andata a buon fine
        Else
            'operazione fallita
        End If
    End Function

Dove q indica cosa cercare e where indica dove cercarlo. Non è una cosa da sottovalutare, ho visto fare questa domanda molte volte. Lo schema delle mappe e le relative query string sono descritti qui.

Diverso è il discorso per i file, visto che non esiste un protocollo specifico. Esiste, però, un metodo chiamato LaunchFileAsync che permette di aprire il programma predefinito per l'estensione del file specificato. Tenuto conto della sandbox in cui girano le Windows Store Apps, il seguente codice mostra come aprire un file di pertinenza dell'applicazione:

    'Richiede Imports Windows.Storage
    Private Async Function OpenFileAsync() As Task
        Dim myFile As StorageFile = Await Package.Current.InstalledLocation.GetFileAsync("MioDocumento.pdf")
 
        If myFile IsNot Nothing Then
            Dim result = Await Windows.System.Launcher.LaunchFileAsync(myFile)
            If result = True Then
                'Operazione riuscita
            End If
        End If
    End Function

Il metodo in questione vuole un oggetto di tipo StorageFile, che rappresenta un file contenuto nello storage riservato all'applicazione. Questo per ragioni di sicurezza, ovviamente una Windows Store App non può e non deve andare a prendere file in giro per il sistema. L'oggetto Package.Current rappresenta l'istanza del package dell'applicazione, InstalledLocation ovviamente la posizione su disco e GetFileAsync permette di ottenere un riferimento al file. Il metodo LaunchFileAsync, a questo punto, non farà altro che avviare il programma predefinito per quel file.

Alessandro

posted @ 07/05/2013 21:50 by Alessandro Del Sole

LightSwitch v3, il client HTML, dove sta andando il prodotto

{Premessa}

Piccola premessa al post: vivere esperienze internazionali mi ha insegnato che se un prodotto, uno strumento, una tecnologia non vengono apprezzati o adottati in Italia non vuol dire che non siano validi e soprattutto non vuol dire che il prodotto stesso non abbia invece un gran successo all'estero. Parentesi chiusa

Breve Intro

Come forse sapete, con il rilascio di Visual Studio 2012 Update 2 sono stati rilasciati anche i bit finali del client HTML per LightSwitch, che consente di allargare gli orizzonti dello sviluppo rapido di applicazioni line-of-business anche al mondo mobile, consentendo di generare applicazioni basate su HTML5/JavaScript, anche senza conoscerli, che siano fruibili da dispositivi quali tablet, telefoni, sistemi Android, iOS, Windows Phone, Windows 8 etc. etc. etc.

Viene dato il risalto più ampio possibile al mondo Web, Cloud e mobile. Questo è il succo.

L'interfaccia grafica si basa sul Microsoft Design Style e permette una fruizione ottimale su dispositivi dotati di touch screen.

Si tratta di un importante passo, chiesto a gran voce dalla comunità di sviluppatori Worldwide, che ha dimostrato, ancora una volta, l'apertura di mente di Microsoft nei confronti di altre piattaforme (che non sempre fanno la stessa cosa, leggi: quelli della mela morsicata). Sicuramente un passo necessario per rimanere competitivi, ma comunque non scontato.

In breve: cosa ci permette di fare

Con questo update, Visual Studio LightSwitch giunge alla sua terza versione. Dedicherò articoli e post tecnici specifici sulla creazione di applicazioni mobili con il client HTML5, nel frattempo potete guardare qualche video su LightSwitch Tips & Tricks, mentre in questo post voglio fare qualche considerazione sulla direzione che sta prendendo il prodotto, potendo godere di un punto di osservazione privilegiato dovuto ai rapporti quasi quotidiani col Team di LightSwitch a Redmond.

In breve, il client HTML5 ci permette da una parte di sfruttare l'approccio che già conosciamo (dati + screen = applicazione Web portabile), dall'altra ci permette di fruire dell'applicazione attraverso un qualsiasi browser Web che supporti HTML5, come nelle seguenti figure che dimostrano un'app all'interno di un iPad emulato e di tre device Windows (miei ):

Tutto molto bello, infatti molti sviluppatori che lavorano su piattaforme mobili diverse si stanno avvicinando a LightSwitch grazie al client HTML. Ma c'è chi viene e c'è chi va, molti sviluppatori desktop si sono spaventati quindi facciamo un po' di chiarezza.

E le postazioni desktop? E la mia immarcescibile filosofia Windows Forms?

{Nota: per desktop intendiamo applicazioni sia in-browser che out-of-browser, di tipo data-entry/consultazione, utilizzate in azienda su pc da tavolo e laptop}

Ricordo un amico MVP americano il quale disse senza fronzoli al Team di LightSwitch: non dimenticate il mondo Windows Forms, riferendosi sarcasticamente a coloro che mai abbandoneranno la mentalità a cui Windows Forms ha abituato gli utenti, anche nel 2013, e che usano LightSwitch per applicazioni di data-entry e consultazione su postazioni desktop con sistemi Windows, sapendo ovviamente che le applicazioni LightSwitch per il desktop si basano su Silverlight 5 e ASP.NET.

Chiarimento importante: è pacifico che il mondo desktop esiste e continua ad essere supportato e lo sarà per lungo tempo. Nessuno però può ancora sapere cosa intenderà fare Microsoft in futuro. Di certo, ci sono cose che dal client HTML non si possono fare e che non avrebbe senso fare da un telefono. Ci sono requisiti che si devono implementare attraverso applicazioni desktop, non fosse altro per le maggiori risorse che possono utilizzare e le maggiori interazioni col sistema che possono avere.

Basti pensare alla gestione di ruoli e utenti, che il client HTML non consente di fare e che va fatta attraverso il consueto client Silverlight (a meno che non siate disposti a deleteri bagni di sangue e conosciate JavaScript e la sua interazione con ASP.NET come le vostre tasche).

Il target di sviluppatori

Un primo cambiamento si ha nel target degli sviluppatori che LightSwitch v3 vuole abbracciare. Le nuove possibilità, i nuovi strumenti, le piattaforme utilizzate, lasciano ben intendere che LightSwitch tende ad allungare il passo e non è più quello strumento per c.d. "power users" a cui pensavamo nella prima versione.

LightSwitch v3 è uno strumento sfacciatamente indirizzato a sviluppatori professionisti che, per loro fortuna o sfortuna, devono avere a che fare con Web e portabilità.

Un primo segnale si è avuto con la v2: LightSwitch non è più venduto come prodotto autonomo, ma è incluso solamente in Visual Studio 2012 Professional o superiore. So bene che ci sono developer che hanno investito nell'edizione stand-alone, ma non posso farci nulla

Gli sviluppatori Access che guardavano a LightSwitch con interesse probabilmente storceranno il naso, è anche però vero che l'esperienza insegna che pochissimi sono i power users che hanno avvicinato LightSwitch; bene o male sono sempre stati sviluppatori di professione ad iniziare ad usarlo per gli scopi più disparati e questa è la direzione.

Il target di utilizzo

Sempre più aziende dotano i propri dipendenti che svolgono i loro compiti in mobilità di dispositivi in grado di accedere alle applicazioni aziendali, dall'interno e dall'esterno. Basti pensare a rappresentanti, a magazzinieri.

La diffusione di tablet e smartphone (senza distinzione di piattaforma) nell'uso quotidiano lavorativo e di intrattenimento ha avuto la ovvia conseguenza di desiderare un client LightSwitch portabile. Ma portabile non vuol dire solo Web per come lo abbiamo sempre inteso. Portabile vuol dire anche Cloud. E Microsoft è da sempre in prima linea, parlando di Cloud. E allora parliamone.

Windows Azure, Office 365, SharePoint Online

Windows Azure e Office 365 sono le piattaforme Cloud più conosciute. Windows Azure è la "madre" ed è di tipo Platform-as-a-service, mentre Office 365 è di tipo Software-as-a-service e si basa proprio su Windows Azure.

Come in ogni tradizione che si rispetti, quando ti danno una piattaforma applicativa devono anche darti gli strumenti per fare le applicazioni. Ed ecco il client HTML di LightSwitch.

Visual Studio dà a LightSwitch la possibilità di pubblicare le applicazioni HTML5 sempre in pochissimi e facili passaggi. Il plus è che LightSwitch v3 si integra alla perfezione con SharePoint, sia "classico" che quello online su Office 365.

La Cloud diventa quindi compagna di LightSwitch, mettendo a disposizione Windows Azure come hosting rapido di applicazioni LOB per immediata produttività e Office 365/SharePoint 2013 online per l'hosting di applicazioni LOB aziendali, che sono così in grado di sfruttare gli strumenti offerti da SharePoint stesso.

Certamente ciò che era prima rimane invariato, quindi pubblicazione su server IIS, ma molti passi avanti sono stati fatti per la Cloud. Non è un caso, infatti, che se pubblichiamo un'applicazione LightSwitch sul nostro account di Azure, il database intrinseco viene anche automaticamente pubblicato su SQL Azure, cosa non prevista nelle precedenti versioni. Ancora, se la nostra applicazione viene pubblicata su SharePoint/Office 365, il database verrà ospitato su di un SQL Azure che fa parte dello spazio a disposizione del nostro account Office 365. Noi non lo vedremo, non lo maneggeremo, ma è così che funziona. E funziona molto bene!

La portabilità con OData

Non dimentichiamo, comunque, che LightSwitch v2 ha introdotto il supporto al protocollo OData. Questo vi permette di esporre dati ad altri client in grado di leggere XML e di consumare dati di altri nello stesso formato. Che, tradotto, vuol dire che se anche non ho portabilità di interfaccia grafica ho portabilità dei dati. Cosa particolarmente importante per chi non mangia grazie al mondo Web/Mobile/Cloud ma vive di desktop.

In conclusione

Il futuro è sempre più mobile, o almeno così si prevede. E la Cloud è entrata ormai nella nostra vita quotidiana, anche se non vogliamo farcene una ragione; non pensate solo a Windows Azure o a Office 365, ma pensate ai vostri contatti sincronizzati, calendari sincronizzati, SkyDrive, iCloud, ecc. ecc.

LightSwitch spinge in questa direzione. Null'altro si sa, ma ciò che si sa è questo. Se lo usate già o se intendete utilizzarlo per applicazioni interne di tipo desktop, comunque, (continuare a) farlo è sicuramente una scelta conveniente, indipendentemente dalle sorti di Silverlight.

Come promesso, seguiranno post, articoli, video che spiegano come creare in pratica applicazioni basate sul client HTML5 in LightSwitch.

Alessandro

posted @ 06/05/2013 21:46 by Alessandro Del Sole

Rilasciato WebMatrix 3

Probabilmente molti di voi conosceranno già WebMatrix, strumento per lo sviluppo di siti Web che, oltre alla sua flessibilità, deve la sua fama al fatto di essere gratuito.

WebMatrix è giunto alla versione 3 e la novità più importante è l'integrazione con Windows Azure. In sostanza, ora potete gestire, aprire, manipolare i vostri Web Sites direttamente dall'interno dello strumento.

Inoltre, è possibile gestire lo sviluppo dei siti in Team sfruttando Team Foundation Server e GIT per il controllo dei sorgenti.

Ulteriori dettagli e link per il download (che avverrà attraverso la Web Platform Installer) a questo indirizzo.

Alessandro

posted @ 03/05/2013 21:03 by Alessandro Del Sole

Community Days 2013, Catania edition

Il 20 e il 21 Maggio si terrà il secondo giro dei Community Days, la prestigiosa conferenza organizzata dalle più importanti community italiane, questa volta nella soleggiata Catania presso la cittadella universitaria.

L'agenda è online e, se siete da quelle parti o volete farvi un giro, non potete non iscrivervi

Si parlerà delle più recenti e importanti tecnologie Microsoft, come nello spirito della conferenza, tra cui ASP.NET 4.5, MVC, Windows Azure, sviluppo per Windows 8 e Windows Phone.

Con i migliori speaker, ovviamente.

Alessandro

posted @ 03/05/2013 20:50 by Alessandro Del Sole

Hidden Visual Studio LightSwitch: il mio nuovo, pratico eBook

E' disponibile da qualche giorno, al modico prezzo di $ 7,99 e solo in formato elettronico, il mio nuovo eBook dal titolo Hidden Visual Studio LightSwitch: Secrets from the Real World for Creating Great Apps.

 

Lo definisco "pratico" per due ragioni:

  • le dimensioni, circa 200 pagine ottimizzate per lettori di eBook e dispositivi mobili
  • gli argomenti: non una guida di riferimento o tutorial, per quello c'è il mio libro Visual Studio LightSwitch Unleashed, ma una raccolta di esperienze, trucchi, suggerimenti, problemi affrontati e risolti, implementazioni di uso comune in applicazioni dipartimentali distribuite.

Si parla di cose che vanno bene sia per LightSwitch 2011 che per 2012, si parla di questioni come migrare un database Access a SQL Server con l'uso di LightSwitch, all'uso di MySQL, alla gestione di documenti PDF su server Web e visualizzazione nell'applicazione LightSwitch, all'analisi dei dati di un'applicazione LightSwitch con Excel sotto varie forme, di strumenti per rendere autonomi utenti non amministratori dell'applicazione a seconda dei livelli gerarchici e molto altro.

Ci sono (quasi ) tutti i risultati dell'esperienza quotidiana di tre anni di lavoro con questo ottimo strumento su complesse applicazioni dipartimentali distribuite.

Se usate LightSwitch e se cercate un testo del tipo "come faccio a?", date un'occhiata alla pagina e al contenuto "Sample Content".

Spero lo possiate trovare utile!

Alessandro

posted @ 18/04/2013 19:44 by Alessandro Del Sole

In RTM il pacchetto per l'uso di Async/Await con Windows Phone 7.5 e Silverlight 4

Vi segnalai, tempo fa, la preview di una libreria disponibile su NuGet per poter utilizzare il nuovo pattern asincrono, costituito dalle parole chiave Async/Await, anche in Visual Studio 2012 con progetti per Windows Phone 7.5 e Silverlight 4/5.

Oggi il team della Base Class Library ha annunciato che la libreria è stata rilasciata in versione definitiva (RTM) ed è sempre disponibile tramite NuGet sotto il nome di Microsoft.Bcl.Async.

L'uso di questa libreria è fenomenale, perché vi permette di semplificare notevolmente la scrittura di codice asincrono in tecnologie precedenti al Framework 4.5 e di evitare blocchi complessi che facciano ricorso a pattern basati su eventi.

Non perdetevelo...

Alessandro

posted @ 18/04/2013 19:33 by Alessandro Del Sole

Archivio Sportelli Bancari - Elenco Abi Cab Aggiornato a Fine Marzo 2013

L'archivio sportelli bancari elenco Abi Cab aggiornato a fine marzo 2013 disponibile per lo scaricamento a questo indirizzo:
Alcune informazioni sui files:
- campi separati da tabulazione hex: 09
- righe separate dal terminatore di riga windows hex: 0d0a
- intestazione colonne sulla prima riga
Il file TabAbi contiene i dati relativi alle banche.
Il file TabAbiCab contiene le informazioni relative agli sportelli
Nel file TabAbi e TabAbiCab è presente il campo "Aggiornamento" che evidenzia la data di riferimento di validità dei dati.
Tutte le righe di TabAbiCab che NON contengono la data più recente sono da considerarsi relative a sportelli non più attivi o assorbiti da altre banche, tali sportelli sono presenti solo come log dei dati storici, ne è sconsigliato l'utilizzo per nuove emissioni di flussi di comunicazione con le banche.
Questo archivio è da considerarsi frutto di una rielaborazione "amatoriale" dei dati degli sportelli bancari reperibili in rete l'unico mio apporto è l'aggiunta della data di ultima importazione in modo tale da costituire un archivio comprendente anche i dati di banche e sportelli non più attivi.
Non si rivendica nessun diritto riguardo al contenuto del file, l'utilizzatore ne può fare ciò che vuole senza contattarmi nè informarmi della cosa, preferirei inoltre non essere neanche citato come fonte in eventuali successive redistribuzioni.
Se si vuole una garanzia circa la correttezza dei dati e/o una qualsiasi licenza il mio consiglio è di NON utilizzare il presente archivio e di rivolgersi direttamente alla propria banca chiedendo di avere in forma ufficiale il file degli sportelli bancari.
I ringraziamenti sono comunque graditi.
Se sentite il malsano bisogno di farmi pervenire una somma di denaro, in alternativa scegliete l'organizzazione umanitaria a voi più gradita e fate a questa il vostro pagamento.

Powered with Windows Live Writer

posted @ 18/04/2013 12:34 by Luciano Bastianello

LightSwitch, SharePoint online, sito di sviluppo

Ne parleremo diffusamente in appositi tutorial, ad ogni buon conto, col rilascio del client HTML5 per LightSwitch, è ora possibile creare rich mobile applications che sono anche pubblicabili su Office 365 per il tramite di SharePoint 2013.

Chiaramente, vi serve un account anche trial. Ripeto, ne parleremo in dettaglio altrove, in questo post voglio evidenziare una problematica e una possibile soluzione.

Nel caso in cui avviate il debug di un progetto LightSwitch abilitato alla pubblicazione su SharePoint e otteniate il seguente messaggio di errore: Sideloading of apps is not enabled on this site

Quello che dovete fare è:

  1. scaricare e installare la SharePoint Online Management Shell preview
  2. creare uno script di PowerShell che contenga il codice indicato in questo forum thread. Per creare lo script, dovete semplicemente incollare quel codice in un file di testo e salvarlo con estensione .ps1. Ovviamente, sostituite nome del sito e credenziali con le vostre
  3. lanciate lo script fornendo credenziali di amministratore del portale Office 365

In questo modo risolverete il problema e l'avvio del debug da Visual Studio 2012 tornerà a funzionare.

Alessandro

posted @ 16/04/2013 13:24 by Alessandro Del Sole

Gestire i Login su SQL Azure con interfaccia grafica

Allo stato attuale, il portale di gestione di Windows Azure non permette la creazione di utenti per database su SQL Azure e lo strumento che si usa è SQL Server Management Studio.

Diversamente da quello che avviene per la parte on-premise, se vogliamo creare degli utenti nel nostro database sulla Cloud dobbiamo scrivere del codice Transact SQL che generi gli utenti, operazione che può risultare anche noiosetta.

Su CodePlex c'è un bel progetto open source, chiamato Azure User Management Console (AUMC), che permette di creare i login attraverso una comoda e semplice interfaccia grafica, che ci evita di scrivere a mano il T-SQL.

Ve lo consiglio, funziona piuttosto bene. Si trova qui.

Alessandro

posted @ 16/04/2013 13:16 by Alessandro Del Sole

Preparare l'installazione offline di Update 2 per Visual Studio 2012

Come sapete, da ieri è disponibile l'Update 2 per Visual Studio 2012 che introduce tantissime novità. Il programma di setup è in realtà un Web installer, quindi scaricherà da Internet i vari file necessari.

Questo può andarvi bene se lavorate con un solo pc, ma se volete fare l'aggiornamento su più macchine può diventare sconveniente il fatto di dover scaricare il tutto ogni volta.

Per tale ragione, potete scaricare il Web installer e preparare l'installazione offline in questo modo:

  • aprire il prompt dei comandi sulla cartella che contiene il Web installer
  • digitare VS2012.2.exe /layout
  • specificare la cartella di destinazione in cui i file verranno scaricati

Al termine del download, avrete tutto il necessario per installare l'aggiornamento senza connettività a Internet (il che vi farà risparmiare un bel po' di tempo).

Alessandro

posted @ 05/04/2013 18:08 by Alessandro Del Sole

Visual Studio 2012: il tema grafico Blue con l'Update 2

Sappiamo che Microsoft Visual Studio 2012 ha strappato con le passate edizioni, piene di colori in ogni loro parte, presentandosi con due temi Light e Dark che hanno un aspetto molto orientato alla Modern UI che caratterizza i prodotti Microsoft più recenti, ma che non ha incontrato il grande favore degli sviluppatori, per i quali spesso qualche colore in più rende più immediata l'interazione con l'ambiente di lavoro.

Con l'Update 2 rilasciato ieri, Microsoft reintroduce il tema Blue:

Per attivarlo, basta andare in Tools, Options, scheda Environment/General e selezionare il nuovo tema dall'apposita tendina:

Anch'io non aspettavo altro e così questo è diventato il tema per VS 2012 sui miei pc.

Alessandro

posted @ 05/04/2013 17:57 by Alessandro Del Sole

Rilasciato "Visual Studio 2012 Update 2"

Ieri Microsoft ha rilasciato un secondo importantissimo aggiornamento per Visual Studio 2012, definito come Visual Studio 2012 Update 2. Questo aggiornamento contiene tantissime novità molto utili, che riguardano diversi aspetti di diverse tecnologie:

  • Blend per Visual Studio 2012 supporta Sketchflow, Silverlight e WPF
  • Nuova versione del kit di certificazione per Windows Store Apps e visual profiler HTML5
  • Miglioramenti ai tool per TFS come la possibilità di gestire al meglio le connessioni ai team project, l'invio di email per i work item, di lavorare al meglio con il wizard di connessione
  • Versione definitiva del client HTML5 per LightSwitch con relativo supporto a Office 365/SharePoint 2013, del quale parleremo in altro post e del quale abbiamo cominciato a vedere qualcosa su LightSwitch Tips & Tricks.
  • Unit testing per Windows Phone
  • Unit testing per Windows Store Apps anche sul thread dell'interfaccia
  • il tema Blue per l'IDE
  • Designer XAML migliorato su progetti molto grandi e che fanno uso di controlli di terze parti, in WPF
  • Velocità e gestione dei log migliorati in IntelliTrace
  • Code Map per avere una rappresentazione grafica del codice in fase di debug

C'è molto altro, in realtà. Potete consultare l'elenco completo di ciò che l'aggiornamento apporta, cliccando qui.

Ci occuperemo di varie novità anche su Visual Basic Tips & Tricks, per cui seguiteci, nel frattempo potete dare un'occhiata al post di Somasegar.

Alessandro

posted @ 05/04/2013 17:46 by Alessandro Del Sole

Visual Studio 2012 Color Theme Editor extension

Non molti lo sanno, ma chi volesse modificare l'aspetto 'scioccante' (nel senso di troppo differente dalle versioni precedenti) dell'IDE di Visual Sudio 2012 lo può fare scaricando l'estensione appositamente creata, da qui:

Visual Studio 2012 Color Theme Editor extension

Attenzione: vale per le versioni dalla Professional in su (niente versioni Express).

Sulla stessa pagina, trovate anche il link a un video su Channel 9 che mostra come applicare l'estensione.

Questo post serve da memo, visto che nei Forum più di qualcuno confessa di rimanere perplesso con il nuovo IDE (scusate l'eufemismo :)) ).

posted @ 02/04/2013 11:07 by Diego Cattaruzza

Windows 8 e il requisito 1.2 per la certificazione delle app

Vi parlavo ieri dell'app Forze dell'Ordine, che ho aggiornato alla seconda versione e che è ora nello store.

Prima che l'aggiornamento fosse approvato, la prima submission non è stata accettata in quanto l'app non rispondeva al punto 1.2 dei requisiti di certificazione, con l'aggiunta di un generico messaggio nel report che diceva che i testers non ritenevano l'app stessa completa in tutte le sue funzionalità senza dettagli aggiuntivi.

Il requisito recita:

1.2 Your app must be fully functional when the customer gets it from the Windows Store

The Windows Store offers only fully functional apps to provide customers with the best experience. Anything that might cause our testers to think that your app is not completely finished will cause your app to fail certification.

You can help us by testing your app thoroughly before you submit it, and by providing us the information we need to test your app thoroughly. For example, if your app requires login credentials, provide us with a demo account. If your app requires access to a server, tell us what we need to do to verify that it's working correctly.

Ma cosa ho fatto per meritarmi questo rifiuto?

In fondo l'app implementa tutte le funzionalità promesse nella descrizione, non accede a server, non richiede account utente.. e quindi?

In questo aggiornamento, come detto, l'utente visualizza solo l'anteprima in formato testo di una notizia ed ha la possibilità di aprire l'articolo nel sito originale attraverso un apposito pulsante. Il problema era proprio qui: inizialmente avevo fatto si che l'articolo venisse aperto esternamente in Internet Explorer, perché ritenevo l'uso di quest'app di gran lunga più efficiente.

In realtà, le guidelines vogliono che l'app sia in grado di fare tutto da sé (in poche parole) quindi ho risolto aggiungendo una pagina all'app, che consente di visualizzare il contenuto senza ricorrere ad IE. Fatto questo, nel giro di poche ore l'app era certificata e presente nello store.

Quindi qual è la morale? Anche se le guidelines non lo dicono esplicitamente, ricordatevi che l'app deve essere autosufficiente.. e non fare ricorso ad app esterne per elaborare le proprie risorse.

C'è sempre da imparare!

Alessandro

posted @ 22/03/2013 14:45 by Alessandro Del Sole

Parsing di HTML con LINQ to XML in Windows 8

Premessa

Probabilmente qualcuno di voi ha scaricato Forze dell'Ordine, una mia app per Windows 8 che aggrega le ultime notizie sulle attività dei Corpi di Polizia dello Stato.

La primissima versione di quest'app, lo ammetto, è stata fatta un po' frettolosamente quindi per ogni notizia viene mostrato anche automaticamente l'articolo completo aprendo la pagina Web del sito in un controllo WebView.

Un po' per consapevolezza, un po' per i feedback, non appena ho avuto un po' di tempo ho deciso di mettere mano al codice, facendo sì che l'app mostri solo il contenuto dell'anteprima dell'articolo e, solo a richiesta dell'utente, visualizzi l'articolo originale nella sua pagina Web (certificata e già in Store).

Problema: il feed di una delle Forze dell'Ordine non ha l'anteprima del contenuto.

Soluzione: scarico l'articolo e recupero l'HTML corrispondente al contenuto, cosa che non avevo mai fatto.

Ragionamenti

Notoriamente non sono mai stato un esperto di HTML e tanto meno del suo parsing. Però posso dire di essere piuttosto esperto di LINQ. Quindi mi sono detto: HTML è markup, XML è markup, XHTML è markup.. quindi posso usare LINQ to XML e gli XML Literals di VB, facendo leggere il contenuto di una pagina HTML alla classe XElement di LINQ.

Come fare

Per cominciare ho letto questo vecchio post di Beth Massi, risalente al 2008. Faceva proprio al caso mio, sia perché conosco qual è il tag HTML da interrogare, sia perché mostra l'uso degli XML Literals.

Ovviamente il presupposto è che il documento HTML da analizzare sia di tipo XHTML "well formed", ossia strutturato secondo regola. Diversamente, conviene ricorrere ad altri tool.

Il punto di vista di Windows 8

Nel riadattare il codice di Beth a Windows 8 (leggetelo altrimenti vi perdete), c'è un particolare: il metodo GetHtmlPage fa un'invocazione al metodo WebRequest.GetResponse, che in WinRT non è disponibile. In questa tecnologia, infatti, abbiamo GetResponseAsync e questo ha senso. Bisogna quindi riscrivere quel codice trasformandolo in asincrono, come segue:

    Async Function GetHtmlPageAsync(ByVal strURL As StringAs Task(Of String)
        Try
 
            Dim strResult As String
            Dim objResponse As WebResponse
            Dim objRequest As WebRequest = HttpWebRequest.Create(strURL)
            objRequest.UseDefaultCredentials = True
 
            objResponse = Await objRequest.GetResponseAsync
            Using sr As New StreamReader(objResponse.GetResponseStream())
                strResult = Await sr.ReadToEndAsync
            End Using
 
            'Replace HTML entity references so that we can load into XElement
            strResult = strResult.Replace("&nbsp;""")
            strResult = strResult.Replace("&""&amp;")
            Return strResult
 
        Catch ex As Exception
            Return ""
        End Try
    End Function

 A questo punto non mi resta che leggere la pagina HTML in modalità asincrona e analizzarne il contenuto:

                    Dim page = Await GetHtmlPageAsync("http://www.sito.com/pagina.html")
                    html = XElement.Parse(page)
 
                    query = From item In html...<div>
                            Select item.<p>.Value

Ovviamente la query va personalizzata secondo le vostre esigenze e il codice presuppone la seguente direttiva Imports, altrimenti non otterrete nulla... :

Imports <xmlns="http://www.w3.org/1999/xhtml">

Ovviamente questa non è la soluzione per tutti i problemi, però è un modo abbastanza rapido soprattutto se si conosce a priori la struttura del vostro documento XHTML.

Alessandro

posted @ 21/03/2013 20:48 by Alessandro Del Sole

Confronto tra controlli in Windows 8 e Windows Phone 8

Come forse sapete, Windows 8 e Windows Phone 8 condividono parte del Windows Runtime. Con questa premessa, se lavorate con XAML e C#/VB avete a disposizione un buon numero di controlli in comune tra le due piattaforme, ma non tutto è uguale.

In questa pagina della documentazione MSDN viene fatto un confronto tra i controlli XAML disponibili in Windows 8 e le relative controparti, se disponibili, di Windows Phone 8.

Se pensate di sviluppare app per entrambe le piattaforme vi conviene dare un'occhiata, di modo che anche la pianificazione sia il più possibile efficiente.

Alessandro

posted @ 18/03/2013 18:09 by Alessandro Del Sole

Windows Phone: ListBox, DataTemplate e allineamento orizzontale degli elementi

In Windows Phone, quando popoliamo una ListBox con una collection, quindi attraverso la specifica di un DataTemplate, potremmo avere la necessità di visualizzare i vari elementi presentandoli ad una larghezza che riempia l'interno spazio disponibile.

In sostanza, questo è il comportamento di default, che però non ci piace:

Il risultato che ci piacerebbe ottenere, per uniformità, è il seguente (anche in considerazione di DataTemplate più complessi e composti):

Inutile impostare HorizontalAlignment="Stretch" su Listbox, DataTemplate e quant'altro. Non produrrebbe effetto.

La soluzione sta nel ridefinire il ContentPresenter della ListBox, con uno stile di questo tipo:

    <phone:PhoneApplicationPage.Resources>
        <Style TargetType="ListBoxItem" x:Key="ListboxStretchStyle">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate>
                        <ContentPresenter HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </phone:PhoneApplicationPage.Resources>

Ovviamente potete piazzarlo nelle risorse a livello di applicazione, se dovete usarlo più volte. Lo stile si applica, poi, all'ItemContainerStyle in questo modo:

                <ListBox ItemsSource="{Binding}" Name="ElencoBox" 
                         ItemContainerStyle="{StaticResource ListboxStretchStyle}"
                         />

Per precisazione doverosa, la soluzione non è farina del mio sacco ma è stata reperita su Internet, se ne parla su StackOverflow e altri siti sparsi.

Alessandro

posted @ 18/03/2013 13:02 by Alessandro Del Sole

Archivio Sportelli Bancari - Elenco Abi Cab Aggiornato a Fine Febbraio 2013

L'archivio sportelli bancari elenco Abi Cab aggiornato a fine gennaio 2013 disponibile per lo scaricamento a questo indirizzo:
Alcune informazioni sui files:
- campi separati da tabulazione hex: 09
- righe separate dal terminatore di riga windows hex: 0d0a
- intestazione colonne sulla prima riga
Il file TabAbi contiene i dati relativi alle banche.
Il file TabAbiCab contiene le informazioni relative agli sportelli
Nel file TabAbi e TabAbiCab è presente il campo "Aggiornamento" che evidenzia la data di riferimento di validità dei dati.
Tutte le righe di TabAbiCab che NON contengono la data più recente sono da considerarsi relative a sportelli non più attivi o assorbiti da altre banche, tali sportelli sono presenti solo come log dei dati storici, ne è sconsigliato l'utilizzo per nuove emissioni di flussi di comunicazione con le banche.
Questo archivio è da considerarsi frutto di una rielaborazione "amatoriale" dei dati degli sportelli bancari reperibili in rete l'unico mio apporto è l'aggiunta della data di ultima importazione in modo tale da costituire un archivio comprendente anche i dati di banche e sportelli non più attivi.
Non si rivendica nessun diritto riguardo al contenuto del file, l'utilizzatore ne può fare ciò che vuole senza contattarmi nè informarmi della cosa, preferirei inoltre non essere neanche citato come fonte in eventuali successive redistribuzioni.
Se si vuole una garanzia circa la correttezza dei dati e/o una qualsiasi licenza il mio consiglio è di NON utilizzare il presente archivio e di rivolgersi direttamente alla propria banca chiedendo di avere in forma ufficiale il file degli sportelli bancari.
I ringraziamenti sono comunque graditi.
Se sentite il malsano bisogno di farmi pervenire una somma di denaro, in alternativa scegliete l'organizzazione umanitaria a voi più gradita e fate a questa il vostro pagamento.

Powered with Windows Live Writer

posted @ 15/03/2013 20:32 by Luciano Bastianello

Windows Phone 8, Async e classi di networking

Se avete sviluppato qualche app per Windows 8 sapete che è possibile utilizzare una nuova classe chiamata System.Net.Http.HttpClient, che consente di lavorare con delle risorse di rete a cui inviare richieste e che offre by design alcuni metodi asincroni da poter usare col pattern Async/Await.

In Windows Phone 8, invece, tale classe non è disponibile per cui se, come me, dovete fare il porting di un'app da Windows 8 a Windows Phone 8 dovete fare alcune modifiche.

In primo luogo si può tornare ad usare la vecchia classe System.Net.WebClient. Questa, però, nativamente non ha dei metodi asincroni che supportano il pattern Async/Await. Allora ci può tornare utile un pacchettino scaricabile con NuGet, di cui parlammo in questo precedente post, chiamato Async for .NET Framework 4, Silverlight 4 and 5, and Windows Phone 7.5. Per quanto riguarda Windows Phone 8, che non avrebbe bisogno di tutto il pacchetto, la descrizione dello stesso specifica che con questo sistema è possibile usare Async/Await con le classi di networking. Aprendo il manager dei pacchetti:

Una volta installato in un progetto Windows Phone 8, è possibile scrivere codice come il seguente, cosa altrimenti non possibile:

        Dim client As New WebClient
        Dim doc = Await client.DownloadStringTaskAsync("http://something.com/myfile.xml")

Decisamente una gran bella opportunità.

Alessandro

posted @ 15/03/2013 16:24 by Alessandro Del Sole

Un'estensione per Visual Studio 2012 per usare le API di WinRT dal Desktop

Chiunque abbia sviluppato qualcosa per Windows 8 utilizzando il Windows Runtime si è sicuramente chiesto se sia possibile sfruttarlo anche nelle applicazioni Desktop.

Pur se con (un bel po' di) limitazioni, questo è possibile e richiede una serie di passaggi affinché il progetto desktop possa referenziare le librerie di Windows 8.

Il mitico Lucian Wischik, Specification Lead di Visual Basic a Redmond, ha pubblicato un'interessante estensione per Visual Studio 2012 che aggiunge all'IDE un modello di progetto Console che è già in grado di sfruttare le API di WinRT.

L'estensione è disponibile nella Visual Studio Gallery a questo indirizzo, dove, tra l'altro, troverete utili indicazioni per usarla.

Sempre Lucian ha anche pubblicato un articolo su CodeProject, nel quale fornisce informazioni più dettagliate sulla questione.

Sicuramente è un argomento da smanettoni, ma magari vi può interessare. Ricordatevi che alcune API di WinRT non potranno mai essere usate nel desktop per questioni di privacy e sicurezza, soprattutto quelle legate a dispositivi hardware e che funzionano nella loro conchiglia sandboxed.

Alessandro

posted @ 13/03/2013 19:48 by Alessandro Del Sole

WinRT: come risolvere se GridView e ListView perdono la direzione

In un'app per Windows 8 che ho appena inviato allo Store per la certificazione mi sono imbattuto in un problema, al quale ho dovuto apportare una soluzione non proprio ortodossa per i miei gusti, ma che è stata la migliore possibile.

Si tratta di un problema che può capitare con i controlli GridView e ListView e sottolineo può, nel senso che non necessariamente capita ogni volta che si usano, anzi. Con molta probabilità dipende dal tipo di DataTemplate che usate. Solo che, se dovesse capitarvi, dovete sapere come tentare di risolverlo.

Nel mio scenario, su una pagina ho una GridView:

                <GridView Name="MyView" ItemsSource="{Binding}" Margin="0,15,0,0" HorizontalAlignment="Left">
                    <GridView.ItemTemplate>
                        <DataTemplate>
                            <!-- custom DataTemplate -->
                        </DataTemplate>
                    </GridView.ItemTemplate>
                </GridView>

Da questa pagina in cui c'è quest'oggetto, effettuo la navigazione a una nuova pagina. Da quest'ultima, torno indietro alla pagina in cui c'è la GridView.

Risultato: invece di mostrarmi gli elementi orizzontalmente, come richiesto, il controllo me li mostra in verticale perdendo l'allineamento.

Faccio una ricerca su Internet e l'unico che parla di questo problema è un signore di Microsoft, che offre una soluzione nel suo blog a questo indirizzo. Sfortunatamente la soluzione proposta non ha risolto il mio problema, quindi quello che ho fatto è stato ridefinire il template del pannello di visualizzazione utilizzando uno StackPanel. Questo va bene per me perché ho pochi elementi da visualizzare, quindi non è necessario virtualizzare. In codice:

                    <GridView.ItemsPanel>
                        <ItemsPanelTemplate>
                            <StackPanel Orientation="Horizontal"/>
                        </ItemsPanelTemplate>
                    </GridView.ItemsPanel>

In questo modo il tutto è tornato a funzionare a dovere. Se doveste capitarvi, quindi, provate a intervenire sull'ItemsPanelTemplate.

Alessandro

posted @ 12/03/2013 14:44 by Alessandro Del Sole

Inviare Email con WindowsPhone

Questo esempio spiega come poter inviare email mediante un device con WindowsPhone.

Per poter provare questo esempio e necessario disporre di un Telefono con sistema operativo WindowsPhone8 , in alternativa e possibile provarlo con VisualStudio e l'emulatore WWGA512 mb , ma senza la possibilità di inviare email.

Con WindowsPhone 7 e 8 e possibile inviare Email non solo direttamente dal dispositivo , ma anche creando la nostra applicazione di qualunque tipo ma con la necessità di inviare email  , per questo Microsoft ci offre la classe EmaliComposeTask . Questa classe offre diverse proprietà da implementare in ogni sua parte in modo da competare tutto il necessario per poter inviare correttamente l'email. Vediamole una per volta e vediamo le loro funzioni , la proprietà Bcc , questa proprietà ottiene o imposta i destinatari nella riga Ccn del messaggio di e-mail , la proprietà Body ottiene o imposta il corpo del messaggio e-mail ,la proprietà Cc ottiene o imposta i destinatari nella riga Cc del messaggio e-mail , la proprietà CodePage ottiene o imposta il set di caratteri che verrà utilizzato per visualizzare il contenuto del messaggio , la proprietà Subject ottiene o imposta l'oggetto del messaggio e-mail ed infine la proprietà To ottiene o imposta i destinatari nella riga A del messaggio di e-mail.  Ci sono alcuni metodi che compongono la classe EmailComposeTask , noi ci concentreremo sul metodo Show() , questo metodo permette di avviare il provider installato sul device per esempio Hotmail  , se invece sul nostro device vi sono più provider verranno tutti elencati e l'utente può scegliere quello con cui vuole inviare l'email. Di seguito posto la parte di codice minima e necessaria per poter inviare un email .

Imports Microsoft.Phone.Controls
Imports Microsoft.Phone.Tasks

Partial Public Class MainPage
    Inherits PhoneApplicationPage

    ' Costructor
    Public Sub New()
        InitializeComponent()
        SupportedOrientations = SupportedPageOrientation.Portrait Or SupportedPageOrientation.Landscape
    End Sub


    'Click event BtnsendClick
    Private Sub BtnsendClick(sender As Object, e As RoutedEventArgs)
        ' Create a new instance of the class EmailComposeTask with which you can send email
        ' I enter the recipients to send the email using the To property of the class EmailComposeTask

        ' Set the title of the property by Subject

        ' Enhanced the value of the Body property EmailComposeTask class, this is the content that will display the recipient
        Dim emailcomposer = New EmailComposeTask() With { _
            .To = String.Concat("mailto:", txtEmail.Text), _
            .Subject = "Email Sample", _
            .Body = txtEmail.Text _
        }

        ' Start the email application on your device to send the Email
        emailcomposer.Show()
    End Sub

End Class

Per maggiori informazioni potete contattarci ai seguenti indirizzi  carmelolm78@live.it

posted @ 11/03/2013 23:31 by Carmelo La Monica

Riprodurre contenuti in loop col controllo MediaElement

Il controllo MediaElement si utilizza per riprodurre contenuti multimediali in tecnologie come WPF, Silverlight, WinRT e Windows Phone, per cui il suo utilizzo è comune.

Tra i vari usi, si può avere la necessità di riprodurre un contenuto in loop, quindi all'infinito. Un modo semplice per implementare questo è gestire l'evento MediaEnded e ricominciare da li.

Ad esempio, ho una variabile boolean per memorizzare lo stato (attivo/disattivo) del loop:

Private isLoop As Boolean = False

Questo ci può servire se ad esempio associamo la gestione dello stato a un pulsante, che si limiterà a cambiarne il valore:

    Private Sub LoopButton_Click(sender As Object, e As EventArgs)
        isLoop = Not isLoop
    End Sub

Da qualche altra parte avvieremo la riproduzione del contenuto multimediale, mentre gestiamo l'evento di fine riproduzione in questo modo (dove Media1 è il nome del MediaElement che sto usando):

    Private Sub Media1_MediaEnded(sender As Object, e As RoutedEventArgsHandles Media1.MediaEnded
        If isLoop = True Then
            Me.Media1.Position = New TimeSpan(0)
            Me.Media1.Play()
        End If
    End Sub

Quindi, in sostanza, dapprima verifico che lo stato di loop sia attivo, poi riporto all'inizio la posizione del contenuto e riprendo la riproduzione.

Alessandro

posted @ 11/03/2013 18:49 by Alessandro Del Sole

tripandia.com: quando il viaggio è social

Di solito non scrivo post non tecnici ma questa volta credo che ne valga proprio la pena.

Da qualche settimana è online tripandia.com, un sito ideato e realizzato principalmente da due mie amici (e colleghi), Daniele e Mauro (appassionati di viaggi) a cui ho preso parte anche io solo negli ultimi mesi.

In poche parole, cos'è tripandia.com? E' un sito che raccoglie le esperienze di viaggio degli utenti coinvolgendo anche la loro cerchia di amici, permettendo di arricchire di informazioni un viaggio non solo da chi l'ha creato ma anche da tutti coloro che vi hanno partecipato.

Quindi, oltre ad inserire le foto ed i luoghi che avete visitato, dove vete mangiato o dormito, potete scrivere il vostro diario di viaggio e permettere ai vostri compagni di viaggio di aggiungere ulteriori informazioni (foto, luoghi, ecc.) che a voi magari sono sfuggite. Per questo io lo definisco social travels.

Perchè ho partecipato a questo progetto?
Primo perchè me l'hanno chiesto due amici e secondo perchè tecnicamente più interessante di quello che faccio normalmente nel mio lavoro.

Ok ok... non riesco proprio a trattenere il mio lato nerd :D


Il sito è realizzato in ASP.NET MVC 4 farcito con diversi framework javascript come jQuery e KnockoutJs, io, però, non ho scritto nemmeno una riga di codice bensì mi sono occupato del layout che non è solo html e css (leggi Bootstrap) ma anche (e soprattutto aggiungerei io) navigabilità e usabilità. Per questo la ritengo un'esperienza molto istruttiva ed interessante.
In gergo è una versione "zero" con tutti i classici problemi di gioventù (pochi ;))  ma contiamo molto sul feedback degli utenti per capire se la strada intrapresa è quella giusta :)

Quindi tocca voi. Fateci sapere cosa ne pensate e...

 

... buon viaggio ;-)

 

PS: se volete seguire un pò le evoluzioni del progetto potete seguirci su Facebook e Twitter


posted @ 11/03/2013 14:21 by Antonio "tdj" Catucci

Windows Phone 8: la classe SaveAppointmentTask

L'SDK per Windows Phone 8 introduce alcuni nuovi launcher, ossia quelle attività del telefono con cui possiamo interagire da codice. Tra gli altri, parliamo oggi della classe Microsoft.Phone.Tasks.SaveAppointmentTask che ci permette di salvare nel calendario un appuntamento o un'attività nel lasso di tempo specificato.

Ad esempio, il seguente codice crea un appuntamento nel calendario:

        Dim appointmentTask As New SaveAppointmentTask
        With appointmentTask
            .AppointmentStatus = Microsoft.Phone.UserData.AppointmentStatus.OutOfOffice
            .Details = "Vado in ferie"
            .StartTime = New Date(2013, 7, 1)
            .EndTime = New Date(2013, 7, 18)
            .Location = "Mare & Montagna"
            .Reminder = Reminder.OneDay
            .Subject = "Mi assento"
            .Show()
        End With

Le proprietà sono abbastanza facili da capire, in particolare ci soffermiamo sulla AppointmentStatus che permette di scegliere come dovremo apparire ai nostri contatti scegliendo un valore dell'enumerazione Microsoft.Phone.UserData.AppointmentStatus. Possiamo scegliere tra OutOfOffice (assente), Busy (occupato), Free (disponibile), Tentative (stato non predeterminabile).

La proprietà Reminder, invece, ci permette di scegliere un valore dell'enumerazione Microsoft.Phone.Tasks.Reminder e di stabilire quanto tempo prima riceveremo un promemoria. In questo caso il giorno prima (OneDay) ma ci sono molti altri valori come dieci minuti, un'ora, ecc. L'IntelliSense come di consueto fornirà il necessario aiuto.

Ovviamente l'appuntamento non verrà salvato direttamente, ma richiederà l'interazione con l'utente il quale, attraverso una familiare interfaccia utente, potrà decidere di modificare i dettagli prima di salvare o di non salvare affatto. Un esempio è dato dalla seguente figura:

Alessandro

posted @ 10/03/2013 19:17 by Alessandro Del Sole

LightSwitch: nuova anteprima del client HTML 5 e molto altro

Due giorni fa è stata rilasciata una nuova CTP dell'Update 2 per Visual Studio 2012, la numero 4, che include, fra l'altro, una nuova anteprima del client HTML5 per Visual Studio LightSwitch e diverse altre caratteristiche molto interessanti.

In questo post parleremo di ciò che riguarda LightSwitch, anche dettagliatamente descritto nel blog post ufficiale del Team (dal quale provengono gli screenshot).

Il client HTML5

Come sapete, il team di Visual Studio LightSwitch sta lavorando sodo sul client HTML5/JavaScript che permetterà alle applicazioni line-of-business create con LightSwitch di poter essere utilizzate su qualunque device, come tablet Apple, Android, Windows 8, sistemi operativi mobili come iOS, Windows Phone, PC, Mac, ecc.

In questa nuova anteprima il layout del client e la sua usabilità sono stati decisamente migliorati:

Tra le nuove caratteristiche:

  • di default viene applicato il CSS per lo stile Light
  • una nuova barra di navigazione permette di gestire i comandi che verranno aggiunti all'app
  • popup e finestre di dialogo migliorati
  • layout (già precedentemente adattabile) che si adatta ancora meglio a seconda del tipo di device
  • icone stile Modern UI già predisposte

Il seguente è un esempio di popup, su un comando che punta a una lista:

Questo, invece, un esempio di popup per l'aggiunta/modifica di un elemento, anziché spostarsi su una nuova pagina:

Qui invece è più evidente come il layout si possa adattare a un dispositivo quale un telefono:

Supporto a SharePoint 2013

Uno degli indirizzi che il team sta dando a LightSwitch è quello di supportare in maniera molto approfondita lo sviluppo per SharePoint 2013. In particolare, l'app si può abilitare ad utilizzare SharePoint e in questa nuova CTP è possibile scegliere di pubblicare l'app su un proprio servizio di hosting:

Se volete provare come LightSwitch possa integrarsi con SharePoint 2013, potete fare un test con Office 365 per il quale, se avete un abbonamento MSDN, vi viene offerto un nuovo benefit che consiste in un account gratuito di un anno.

Altro

Altri importanti miglioramenti vengono introdotti, quali:

  • possibilità di personalizzare la pagina di login con autenticazione Forms, ora offerta tramite pagina .Aspx
  • supporto alle liste di SharePoint 2013
  • supporto a NuGet migliorato
  • miglioramenti nella navigazione tra screen all'interno di Visual Studio

In the end

Potete scaricare la Visual Studio 2012 Update 2 CTP 4 da qui. Non dimenticate di visitare il developer center per il client HTML e il blog del Team di LightSwitch, che contengono tantissimi articoli e risorse per lo sviluppo con queste nuove possibilità.

Importante: non è prevista una licenza Go Live, quindi le app che sviluppate con questa CTP non possono essere pubblicate e utilizzate in produzione.

Importante 2: vi ricordo che esiste LightSwitch Tips & Tricks, la community italiana dedicata a Visual Studio LightSwitch, che nei prossimi giorni si arricchirà di contenuti e tutorial sul client HTML5.

Alessandro

posted @ 06/03/2013 22:25 by Alessandro Del Sole

Office Developer Tools per Visual Studio 2012

Somasegar ha appena annunciato il rilascio della versione finale degli Office Developer Tools per Visual Studio 2012.

I nuovi tool offrono il pieno supporto allo sviluppo per Office 2013 e SharePoint, oltre che al modello di sviluppo già noto dei Visual Studio Tools for Office. Integrazione perfetta con Windows Azure e Team Foundation Services completano il tutto.

Circa SharePoint, i tool offrono anche il supporto per la pubblicazione di app nell'Office Store.

Ovviamente questi tool sono anche il punto di partenza verso Office 365 e, tra l'altro, Soma fa sapere che nei nuovi benefit per abbonati MSDN c'è un account sviluppatore della durata di un anno proprio per Office 365 (ho già attivato )

I tool vengono installati tramite Web Platform Installer, facendo clic su questo link.

Alessandro

posted @ 04/03/2013 21:46 by Alessandro Del Sole

Il mio primo eBook: "Hidden WPF"

Giorni fa è stato pubblicato da InformIT (la divisione online del mio editore SAMS/Pearson) il mio primo eBook, dal titolo "Hidden WPF: Secrets for creating great applications in WPF":

Hidden WPF: Secrets for Creating Great Applications in Windows Presentation Foundation

Non è la solita pubblicazione. E' un libriccino di 99 pagine prodotto in un formato pensato per dispositivi mobili, in cui troverete moltissimi consigli, trucchi, suggerimenti e implementazioni che ho raccolto nella mia esperienza quotidiana nello sviluppo client con Windows Presentation Foundation.

Al prezzo di $ 7,99 troverete molte info su come lavorare con documenti PDF e XPS, suggerimenti per ottenere il meglio dall'IDE di Visual Studio con WPF, migliorare le vostre tecniche di debugging, migliorare le performance dell'interfaccia utente, implementazioni comuni (es. ComboBox con tabelle di lookup), descrizione di strumenti di produttività gratuiti o a pagamento che magari non sapevate che esistono.

Per conoscenza, si tratta di una nuova collana di SAMS dedicata a materiale disponibile solo in formato digitale e della quale ho avuto l'onore di essere pioniere. Ovviamente, non sarà disponibile un'edizione in italiano  

So che finalmente WPF ha preso il giusto piede nello sviluppo per Windows e questo manualetto vi può dare una mano: dopotutto, non dimentichiamoci che nonostante il Web, HTML5 e le app per Windows 8, se oggi volete sviluppare per Windows client vi serve ancora WPF.

Alessandro

posted @ 02/03/2013 20:30 by Alessandro Del Sole

Com'è andata ai Community Days 2013

Si è conclusa la due giorni dell'evento community più importante dell'anno, i Community Days edizione 2013. Sfortunatamente ho potuto partecipare solo alla giornata di ieri, peraltro molto intensa e interessante, sulla quale voglio dire due parole.

Innanzitutto un ringraziamento a Daniele Bochicchio e Andrea Saltarello per averci messo le migliori energie e per aver fatto sì che quest'anno, più degli anni scorsi, fosse un evento davvero eccezionale. Organizzazione impeccabile in tutti i settori, dalla logistica, all'agenda, a un fenomenale coinvolgimento a livello personale. Insieme a loro, il ringraziamento va alle persone che hanno collaborato a gestire alcuni aspetti pratici e per nulla banali come ad esempio la registrazione.

Per il resto, ho avuto il grande onore di essere chiamato sul palco durante la Keynote per fare un'introduzione di 15 minuti allo sviluppo di app per Windows 8 con XAML e C#/VB. Decisamente una responsabilità non di poco conto, che spero di aver assolto con un discreto risultato.

Mi sono trovato davanti più di 300 persone e, credetemi, in tanti speech fatti questa volta avevo il cuore in gola. E' stata un'emozione molto bella, quella che solo il mondo delle community può darti.

Oltre ad essere, come di consueto, un'occasione speciale per ritrovare vecchi e nuovi amici provenienti da tutto lo Stivale. Infine, la mia sessione.

Quella che ho tenuto ieri si intitolava "Costruire applicazioni Line-of-Business con LightSwitch 2012, Windows Azure e HTML5". Durante la sessione ho spiegato come il nuovo client HTML5, attualmente in CTP2 e su cui il Team di LightSwitch sta lavorando duramente, permetta di creare in pochi passaggi applicazioni LOB il cui deploy su Windows Azure, sempre con pochi passaggi, sia la ciliegina sulla torta. Devo dire che LightSwitch riscuote sempre un discreto interesse, sebbene molti siano ancora interessati più alla parte desktop.

Se volete farvi un'idea, cliccando sul titolo della sessione potrete accedere alla relativa pagina da cui scaricare le slide.

Se non ci siete venuti, vi consiglio caldamente di partecipare alla prossima edizione. Si respira un'aria speciale, oltre a imparare un sacco di cose nuove.

Alessandro

posted @ 28/02/2013 00:38 by Alessandro Del Sole

Community Days 2013: si parte!

E' ormai tutto pronto per i Community Days, giunti all'edizione 2013, l'evento community più importante dell'anno organizzato dagli User Group italiani sulle tecnologie .NET, tra cui ovviamente anche Visual Basic Tips & Tricks.

Sarò presente domani con una sessione che butta un'occhio al futuro, neanche tanto prossimo, dedicata all'utilizzo del nuovo client HTML5 di Visual Studio LightSwitch con riferimento particolare al deploy di applicazioni portabili su Windows Azure.

Se domani siete presenti, venite a salutarmi così scambiamo due chiacchiere. E godetevi l'evento, quest'anno sarà veramente spaziale!

A domani!

Alessandro

posted @ 26/02/2013 16:27 by Alessandro Del Sole

MVP Of The Year 2012

La scorsa settimana ho avuto il piacere di essere presente all'MVP Global Summit, l'evento che Microsoft Corporation organizza ogni anno per incontrare gli MVP di tutto il mondo con cui fare condivisione dei percorsi tecnici presenti e futuri e, ovviamente, per essere in contatto più diretto.

Ed è nell'ambito di questo evento che, per la 4° volta consecutiva, sono stato votato MVP Of The Year per Visual Basic tra gli MVP di tutto il mondo. E' veramente una soddisfazione grandissima, anche perché 4 anni di fila su 5 da MVP non è per nulla usuale, quindi devo davvero ringraziare di cuore tutte le persone, MVP sparsi per il globo e chi nel gruppo di prodotto in Microsoft, di avere manifestato tantissima stima e apprezzamento per le mie attività di community, che sono sempre mosse esclusivamente da una grandissima passione per la tecnologia e per Microsoft.

Quest'anno ho avuto il piacere di sedermi a tavola con Scott Hanselmann e Brian Harry, meglio noti come rispettivamente uno dei padri di ASP.NET e il papà di Team Foundation Server, persone davvero simpaticissime e per nulla tecniche davanti a una bella tavolata :-)

Infnine, una piccola foto ricordo con l'oramai amica di vecchia data Lisa Feigenbaum:

Ma soprattutto, Visual Basic really rocks!

Alessandro

posted @ 26/02/2013 16:11 by Alessandro Del Sole

La mia esperienza con Windows 8: capitolo 3

A proposito di alcuni temi che tengono a lungo nel dubbio gli utenti più avanzati di Windows, spesso incollati a lunghe discussioni sui forum, ho voluto finalmente vederci chiaro.

Per prima cosa, ho scoperto che è meglio mantenere il file di swap attivato, anche e soprattutto su un disco SSD. La sua velocità, infatti, permette di sopperire al meglio alla mancanza di memoria RAM. Da considerare, inoltre, che l'utilizzo del file di swap da parte di Windows non è fatto solamente quando la RAM libera si esaurisca, come erroneamente si pensa, ma anche in altri contesti, per esempio liberare risorse preziose.



Stessa cosa per l'ibernazione: disattivarla, cosa che elimina il file hybernate permettendo di salvaguardare prezioso spazio sul disco SSD, non permette la salvaguardia dei dati in caso di black-out in fase di sospensione. Anche con un gruppo di continuità, se il black-out fosse protratto oltre la durata della batteria, l'ibernazione garantirebbe la salvaguarda del sistema, con come unico scotto da pagare un'occupazione su disco pari alla quantità di RAM installata sul sistema.

Io quindi preferisco mantenere il file di swap impostato come fisso (mai dinamico, attenzione!) alla dimensione consigliata da Windows e mantenere attivata la possibilità dell'ibernazione. Lasciamo a Windows decidere come gestire per noi queste faccende delicate, in casi come questi fa molto meglio di noi!

Fonte, il blog di Steven Sinofsky, uno che ha lavorato molto allo sviluppo di Windows stesso:
http://blogs.msdn.com/b/e7/archive/2009/05/05/support-and-q-a-for-solid-state-drives-and.aspx

Infine, la deframmentazione. Anche qui si pensa erroneamente di disattivarla in presenza di un disco SSD. Ebbene niente di più sbagliato sui recenti sistemi operativi Microsoft. Su Windows 7, infatti, questa è effettivamente automaticamente disattivata su dischi allo stato solido, mentre sul più efficiente Windows 8 questa è importante mantenerla attivata, in quanto il sistema riconosce il disco come un SSD e si comporterà di conseguenza, effettuando operazioni di manutenzione - come il trimming - in modo automatico e trasparente. Queste operazioni di manutenzioni, effettuate da Windows 8 durante il "defrag", permettono al disco SSD di vivere più a lungo e in condizioni di perfetta efficienza.



Anche qui vale il consiglio di prima: in questi casi, dove è stato istruito a dovere, lasciamo a Windows decidere che uso fare del nostro hardware, lo sa molto meglio di noi, basta dargli fiducia!

posted @ 12/02/2013 06:53 by Sergio Pappalardo

Archivio Sportelli Bancari - Elenco Abi Cab Aggiornato a Fine Gennaio 2013

L'archivio sportelli bancari elenco Abi Cab aggiornato a fine gennaio 2013 disponibile per lo scaricamento a questo indirizzo:
Alcune informazioni sui files:
- campi separati da tabulazione hex: 09
- righe separate dal terminatore di riga windows hex: 0d0a
- intestazione colonne sulla prima riga
Il file TabAbi contiene i dati relativi alle banche.
Il file TabAbiCab contiene le informazioni relative agli sportelli
Nel file TabAbi e TabAbiCab è presente il campo "Aggiornamento" che evidenzia la data di riferimento di validità dei dati.
Tutte le righe di TabAbiCab che NON contengono la data più recente sono da considerarsi relative a sportelli non più attivi o assorbiti da altre banche, tali sportelli sono presenti solo come log dei dati storici, ne è sconsigliato l'utilizzo per nuove emissioni di flussi di comunicazione con le banche.
Questo archivio è da considerarsi frutto di una rielaborazione "amatoriale" dei dati degli sportelli bancari reperibili in rete l'unico mio apporto è l'aggiunta della data di ultima importazione in modo tale da costituire un archivio comprendente anche i dati di banche e sportelli non più attivi.
Non si rivendica nessun diritto riguardo al contenuto del file, l'utilizzatore ne può fare ciò che vuole senza contattarmi nè informarmi della cosa, preferirei inoltre non essere neanche citato come fonte in eventuali successive redistribuzioni.
Se si vuole una garanzia circa la correttezza dei dati e/o una qualsiasi licenza il mio consiglio è di NON utilizzare il presente archivio e di rivolgersi direttamente alla propria banca chiedendo di avere in forma ufficiale il file degli sportelli bancari.
I ringraziamenti sono comunque graditi.
Se sentite il malsano bisogno di farmi pervenire una somma di denaro, in alternativa scegliete l'organizzazione umanitaria a voi più gradita e fate a questa il vostro pagamento.

Powered with Windows Live Writer

posted @ 09/02/2013 17:37 by Luciano Bastianello

La mia esperienza con Windows 8: capitolo 2

Se volete una dritta: nel caso voleste fare come me e agire in modo cauto, ossia provando prima su macchina virtuale (VM) il nuovo Windows... beh, staccate il router oppure disabilitate la scheda di rete della macchina virtuale.

Infatti, se con le versioni precedenti, all'inizio dell'installazione, Windows vi chiedeva il semplice CD-KEY inciso sul retro della confezione del CD/DVD (come per Office), poi l'attivazione veniva sì fatta via internet, ma appariva un avviso che chiedeva se effettuarla o meno, eventualmente rimandandolo (per un periodo di tempo limitato).

Adesso, con Windows 8, il CD-KEY vi permetterà, come sempre, di continuare l'installazione, ma l'attivazione sarà automatica non appena Windows troverà la connessione attiva, senza richieste all'utente! Questo non era mai accaduto con le versioni precedenti di Windows e vi troverete nel caso che, pur rimuovendo l'installazione di prova, sia disattivando Windows tramite apposito comando da prompt dei comandi, sia rimuovendo del tutto la VM... che quando installerete Windows 8 in via definitiva sul vostro sistema vi dirà che il codice non è valido perchè usato già su un altro PC! Il che è anche plausibile, ma una richiesta all’utente no?

La soluzione che vi resta, a questo punto, sarà quella, come successo a me, di dover ricorrere all'attivazione telefonica (come suggerito, del resto, dallo stesso Assistente Attivazione di Windows 8). Ho chiamato quindi il numero verde indicato dall'Assistente Attivazione, al quale non risponde nessun operatore, è tutto automatico. Ho digitato i 9 gruppi di 7 cifre quando mi sono stati richiesti, dopodichè mi sono stati forniti 8 gruppi di 6 cifre che ho inserito negli appositi spazi dell'assistente di attivazione. Dopodichè Win era attivato! Semplice, indolore, automatico e gratuito.

Sì però... che diamine, 15 minuti di tempo perso!!! Bastava un avviso: "vuoi attivare adesso la tua copia di Windows?" Evil or Very Mad

So che non si può installare una licenza Windows su più PC o VM che siano, però il mio era solo un test, per cui ho disattivato la licenza e poi rimosso Windows 8 dalla VM ancora prima di installarla sul PC reale. E di certo, in un test di un paio di giorni, non avrei attivato la licenza!

Va beh, comunque tutto bene. Spero questo consiglio possa servire a più di qualcuno, visto che testare un nuovo sistema operativo prima di utilizzarlo per lavorarci non è un modo infrequente di operare (ma è anzi raccomandabile).

L’attivazione telefonica sarà anche necessaria nel caso in cui cambiaste hardware e voleste reinstallare Windows 8 (e successivi?).




posted @ 07/02/2013 22:30 by Sergio Pappalardo

La mia esperienza con Windows 8: capitolo 1

A un test veloce di Windows 8 sotto macchina virtuale mi è sembrato molto veloce e reattivo (ho assegnato alla VM solo 2 GB di RAM) e trovo lo stile Modern (ex Metro!) molto piacevole. La possibilità di accedere al Desktop è immediata e le vecchie applicazioni non sembrano avere problemi di sorta. Il passaggio da Modern a Desktop è istantaneo e veloce, sia tramite mouse che tramite pressione del tasto <WIN> su tastiera.

Persino il tanto bistrattato pulsante di spegnimento l'ho trovato velocemente, talmente velocemente che ho pensato "Ma no dai, non può essere che tanti dicessero che ci avevano messo mezz'ora a capire come spegnere Windows 8!" e ho rifatto la procedura per essere sicuro che fosse così banale... eh sì, è proprio banale! Addirittura i clic per spegnere Windows 8 sono solo 3, esattamente come col menu Start di Vista:

VISTA:
1: clic su Start
2: clic sulla freccina ">" in basso al menu
3: clic su "Arresta il sistema"

WINDOWS 8
(nessun clic): mouse in basso a destra, apparirà la barra delle opzioni
1: clic su "Impostazioni"
2: clic su "Arresta PC"
3: clic su: "Spegni"

Non vedo differenze né complicazioni!

Adesso il prossimo passo e rifare tutto sul sistema reale, dove, al posto del secondo disco virtuale dove installare prima Vista e poi Windows 8 aggiornamento, ci sarà un SSD Samsung 840 da 256 GB.

Nel prossimo capitolo vi racconterò com'è andata!

posted @ 06/02/2013 06:39 by Sergio Pappalardo

La mia esperienza con Windows 8: capitolo 0

Al momento l'ho solo installato su macchina virtuale per sperimentare il dual boot. Desidero, infatti, mantenere il mio attuale ambiente di lavoro sotto Vista, in modo da completare la migrazione a Windows 8 con calma, potendo lavorare in qualsiasi momento riavviando con il familiare Vista.

Ho quindi avviato la macchina virtuale (uso Sun VirtualBox) con Vista già installato (una delle vm che uso per testing dei miei software). Ho inserito il DVD originale di Vista 64 Ultimate e riavviato la macchina virtuale: al boot è partita l'installaizone di Vista che ho installato su un secondo disco virtuale. Al termine dell'installazione mi veniva presentata al boot la schermata stile DOS che mi permetteva di scegliere quale dei due Vista avviare, quello "vecchio" con varie cose installate e quello nuovo sul secondo disco.

A questo punto ho inserito il DVD con masterizzata la ISO di Windows 8 64 Pro, acquistata pochi minuti prima dal negozio on-line Microsoft, come aggiornamento. Ho riavviato la macchina virtuale e al boot è partita l'installazione di Windows 8, al termine della quale, al riavvio mi veniva proposta questa schermata (grafica e non a caratteri DOS come ci avevano abituato fino a Windows Seven) che mi chiedeva quale sistema avviare:


In questo modo ho potuto verificare che il doppio boot è possibile anche con la versione "aggiornamento" di Win8, permettendomi di continuare col mio abituale ambiente di lavoro e di testare il porting completo dello stesso sotto il nuovo Windows gradualmente, senza dover forzatamente interrompere il lavoro per tutta la durata della migrazione.

Un buon inizio direi!

posted @ 04/02/2013 21:23 by Sergio Pappalardo

Il mio nuovo libro Visual Basic 2012 Unleashed è disponibile

Da qualche giorno è disponibile il mio ultimo libro, Visual Basic 2012 Unleashed, sesto della mia vita e terzo in inglese.

Per questa mia ultima 'fatica' ho avuto l'onore di una prefazione scritta da Lucian Wischik del Visual Basic Team di Microsoft Corp., il quale, come forse sapete, è il Visual Basic Specification Lead, ossia la persona responsabile del linguaggio e che ne decide le specifiche e le forme sintattiche, oltre ad essere uno dei 'fondatori' del nuovo pattern Async/Await che è forse la più importante novità del linguaggio.

Come sempre è una grandissima soddisfazione vedere su carta, o comunque in modo tangibile, il risultato di un lavoro lungo e faticoso come può essere un volume di 1440 pagine, lo sarà ancora di più quando avrò opportunità di vederlo in qualche libreria oltre oceano, ma sfogliare un tuo libro ti dà sempre una sensazione così bella e positiva che ti spinge quasi subito a ricominciare

Visual Basic 2012 Unleashed, come il suo predecessore, ha un duplice scopo:

  • quello di sviscerare a fondo il linguaggio Visual Basic nella sua più recente versione, passando attraverso tutte le forme sintattiche, le nuove parole chiave, programmazione a oggetti, classi del .NET Framework, incluse le nuove e incredibili potenzialità offerte dalla programmazione asincrona basata sul pattern Async/Await, che peraltro diventa fondamentale per sviluppare per Windows 8;
  • quello che forse ha sempre caratterizzato le mie attività e il mio modo di vedere VB, ossia di (di)mostrare l'utilizzo del linguaggio con tutte le più recenti tecnologie Microsoft, come WPF, Windows Phone, Windows Azure, Silverlight 5, senza avere nulla in meno degli altri linguaggi .NET.

Non voglio annoiarvi con una descrizione allungata (e probabilmente anche di parte ), vi rimando alle seguenti risorse che potete scaricare gratuitamente:

Vi ricordo, infine, che il libro può essere ordinato anche su Amazon.

Se lo leggerete e avrete voglia di lasciare un feedback, passate pure di qua!

Alessandro

posted @ 30/01/2013 17:23 by Alessandro Del Sole

FallFury Open Source 2D game per Windows8

Vi segnalo questo interessante progetto rilasciato in formato sorgente su CodePlex.

Rappresenta un’ottimo tutorial per imparare a sviluppare un Game 2D su piattaforma Windows8 utilizzando DirectX e XAML.

FallFury

 

Renato Marzaro

posted @ 29/01/2013 17:48 by Renato Marzaro

Come Microsoft ti può migliorare la vita

Premessa

Questo non è un post tecnico come i soliti che scrivo, è piuttosto un articoletto dedicato agli amici non tecnici che non conoscono le potenzialità di tecnologie e software Microsoft e dei quali spero di stimolare la curiosità ad informarsi un po' di più.

Visto che si fa un gran parlare di Cloud, oltre al fatto che iCloud di quelli della mela mangiata è arrivato dopo circa 10 anni da quando Microsoft ha lanciato i suoi primi servizi, facciamo anche chiarezza su cos'è.

Microsoft e la posta elettronica, i contatti e il tuo hard disk sempre con te grazie a Internet

Da tempi infiniti, Microsoft ha offerto caselle di posta elettronica gratuitamente, su quelle piattaforme che conoscevamo come Hotmail e Live, ora unificate sotto Outlook.com.

Perché mi conviene aprire un indirizzo email con Microsoft e Outlook? Per i seguenti motivi:

  • associato alla posta elettronica, mi danno uno spazio di memorizzazione di 7 Giga su Internet, una sorta di hard disk virtuale, chiamato SkyDrive. Con SkyDrive potete memorizzare tutti i vostri documenti, foto, video, file di qualunque genere organizzandoli in cartelle come fareste col vostro PC. Tali cartelle possono rimanere private o condivise solo con chi dite voi, di modo che anche scambiare file grossi con altre persone sia molto facile. Di SkyDrive vi darò qualche dettaglio dopo.
  • Office sempre e comunque. Avete documenti di Office che memorizzate sul vostro SkyDrive? non avete Office installato sul vostro PC ma ne avete necessità? con Microsoft avete Office accessibile da Internet!
  • calendario e contatti sempre aggiornati coi vostri dispositivi. Se ad esempio avete Windows Phone, Windows 8 o più semplicemente Outlook sul vostro computer, calendario e contatti della rubrica saranno sempre aggiornati. Che vuol dire? vuol dire che non li perderete mai, anche se vi si rompe il telefono. E che altro vuol dire? vuol dire che vi basta un qualunque dispositivo in grado di accedere a Internet.

 Vediamo qualche dettaglio in più sui punti dell'elenco, più qualcos'altro.

La posta elettronica

Creare un account di posta elettronica con Microsoft è semplice, basta andare su Outlook.com e seguire le istruzioni. Questo dà diritto ad avere tutto quanto elencato prima. Un piccolo esempio di consultazione della posta elettronica, che peraltro ricalca la veste di Outlook 2013 per PC:

La casella a discesa in alto permette di passare alle varie funzionalità, come si può vedere dalla seguente figura, come il calendario, l'elenco dei contatti, SkyDrive:

SkyDrive, il tuo hard disk ovunque.

SkyDrive è sostanzialmente un hard disk su Internet, gratuito, associato all'indirizzo email che aprite con Microsoft. Vi vengono dati 7 Gigabyte gratis, subito e per sempre. Se poi vi serve più spazio, con una bazzecola all'anno potete incrementare lo spazio fino a svariate centinaia di Giga (es. 8 euro all'anno per 20 giga in più, quindi 27). Il bello di SkyDrive è che vi permette di avere gli stessi file sia in locale sul vostro dispositivo sia su Internet, in totale sincronizzazione o semplicemente sincronizzando le cartelle di vostro interesse.

Come si accede a SkyDrive? Semplice: attraverso il tuo browser Web, qualunque sistema operativo Microsoft o non Microsoft tu abbia. Questo è un esempio di accesso Web al mio SkyDrive, in cui si vedono una serie di cartelle:

Ciascuna cartella, come nella seguente figura, contiene file, cartelle e può essere gestita con gli appositi pulsanti:

Oppure potete accedere attraverso delle specifiche app per il tuo telefono (iPhone, Android, Windows Phone) o per il tuo tablet (iPad, Windows 8) come quella, ad esempio, per iPhone (la figura è ripresa dall'Apple Store):

Se poi avete Windows 8, SkyDrive fa ancora di più: automaticamente memorizza i vostri Preferiti, il vostro sfondo del desktop, le password delle vostre connessioni Wi-Fi, di modo che su qualunque computer con Windows 8 avrete sempre tutto uguale, impostato automaticamente per voi, senza che dobbiate fare niente a mano!

E se poi siete curiosi, e mi auguro che lo siate, provate un po' a confrontare cosa vi danno gli altri e cosa vi dà Microsoft cliccando qui. Probabilmente molti rimarranno sorpresi nel sapere che iCloud, quello della mela appiattita, è quello che offre decisamente meno anche in termini di fruizione da varie piattaforme.

Ma cos'è poi 'sta Cloud?

'Cloud' in inglese vuol dire nuvola e in informatica sta a rappresentare informazioni che vengono memorizzate e accedute tramite Internet. E' un concetto davvero molto molto ampio, che comprende potenti infrastrutture, security, tecnicismi non di poco conto, e molto altro tra cui anche l'aspetto che abbiamo appena visto. Se usate Skydrive, email, contatti e calendario sincronizzato, state facendo un uso specifico della Cloud. Che Microsoft vi offre da molti anni, quegli altri non hanno inventato proprio nulla, sono arrivati ben dopo e ... a pagamento. Sappiatelo  Poi la Cloud include caratteristiche specifiche per le aziende, come Windows Azure, infrastrutture di Platform-as-a-service, ma in questo post non è il caso di parlarne

Skype

Come sapete, da qualche tempo Microsoft ha acquisito Skype, il noto programma di messaggistica e conversazioni vocali online. Non solo, il buon vecchio Windows Live Messenger sta andando in pensione, proprio a favore di Skype che si integra alla perfezione con i contatti che avete memorizzato nella vostra posta Outlook (ma anche quelli Facebook, Twitter) senza che dobbiate star li a fare niente.

Office senza avere Office: Office online, sempre e dovunque

Secondo me una delle più grandi caratteristiche dei servizi Microsoft è la possibilità di avere Office su Internet, anche senza averlo su PC. Ad esempio, con SkyDrive aperto, è sufficiente cliccare sulla (o toccare la) freccetta vicino alla voce Crea e veder comparire un elenco che parla da solo:

Quindi potete creare dei documenti di Office, oltre che chiaramente aprire ed elaborare documenti di Office esistenti e caricati su SkyDrive, anche senza avere Office sul vostro PC perché state lavorando con la versione online associata alla vostra email!

Ecco un documento creato con Word, che al termine potremo salvare sul nostro SkyDrive e magari inviare per email:

Vi ricordo che non vi serve per forza un pc, ma è sufficiente il browser Web del vostro tablet, telefono, ecc.. Credo che questa sia la vera figata di tutti i servizi Microsoft e credo che molti suoi competitor abbiano molta molta strada da fare ancora.

I contatti

Qualunque piattaforma utilizziate, memorizzare l'elenco dei vostri contatti su un account nella Cloud è secondo me veramente buona norma. Questo vi permetterà di averne una copia sempre disponibile, a patto ovviamente di avere una connessione, e vi può salvare la vita se il vostro telefono vi si rompe: vi basterà chiedere a un amico di accedere a Internet e potrete recuperare il vostro elenco.

Con Windows 8 e Windows Phone, sia 7.5 che 8, ogni qual volta aggiungete un contatto alla 'rubrica' del telefono o attraverso l'applicazione specifica, automaticamente quel contatto viene sincronizzato con l'elenco associato alla vostra email. Non voglio e non posso soffermarmi troppo su quanto Windows Phone e Windows 8 possano ulteriormente migliorarvi la vita, ma sappiate che questi due sistemi sono totalmente integrati con SkyDrive, la posta, i contatti, Skype, Facebook, e molto molto altro. Pensateci.

Per tutti

Chi non conosce Microsoft, spesso parla con poca cognizione di causa. In particolar modo, i fan della mela, parlano in quanto fan ma non sempre in quanto ben informati.

A differenza della Apple, che è famosissima per le restrizioni che impone ai propri utenti (a prezzi fuori da ogni buon senso) e ad altri produttori, Microsoft offre i suoi servizi a tutti, dove per tutti intendiamo anche utilizzatori di altri dispositivi.

Tutto quello che vi ho elencato lo potete avere a disposizione anche se usate un iPad o un cellulare Galaxy con Android sopra. Se potete avere tanto con questi dispositivi, figuratevi cosa potreste fare con sistemi Windows e Windows Phone.

Conclusione

I software e le tecnologie Microsoft vi offrono tantissimi servizi in modo gratuito, che vi permettono di avere sempre, ovunque e comunque tutti i vostri dati, le foto, i video, la musica, i contatti, Office..

Ci sono altre piattaforme che vi offrono cose simili ma a livello parziale, per un modo o per un altro. E se poi passate a Windows 8 e Windows Phone, i vostri dispositivi saranno sempre sincronizzati tra loro.

Alessandro

posted @ 28/01/2013 19:03 by Alessandro Del Sole

Windows Phone: creare e mostrare un popup

Nelle app per Windows Phone può capitare la necessità di richiedere l'input o l'interazione dell'utente attraverso un popup che si innesti nella pagina, invece che navigare ad un'altra pagina e poi restituire il risultato dell'input in modo più complesso.

Per creare un popup, la prima cosa da fare è definire uno User Control:

E' sufficiente poi definire lo XAML che contiene i controlli da mostrare, tipicamente testo, pulsanti, TextBox o quello che comunque vi serve. Questo è un mero esempio:

    <StackPanel x:Name="LayoutRoot"  Width="480" Height="300" 
                Background="Black">
        <TextBlock Text="questo è un popup" Margin="20,0,0,0" 
                   FontSize="48" />
        <Button x:Name="btnOK" Content="OK"
                    Width="150" Height="150"/>
    </StackPanel>

E' chiaramente fondamentale assegnare nomi ai controlli, poiché l'interazione con questi non avverrà dal codice dello user control, bensì da quello della pagina che lo invoca. Supponendo che tale popup venga richiamato dalla pagina principale dell'app, questo è un esempio di come mostrarlo:

        Dim popup As New Popup()
        popup.Height = 250
        popup.Width = 400
        popup.VerticalOffset = 200
        Dim control As New WindowsPhoneControl1
        popup.Child = control
        popup.IsOpen = True
 
        AddHandler control.btnOK.Click, Sub(sender1, e1)
                                            'Il pulsante OK del poè stato toccato,
                                            'rispondi all'input come meglio credi  
                                            popup.IsOpen = False
                                        End Sub

Si noti che la proprietà VerticalOffset del popup stabilisce la distanza dal margine superiore. Il risultato si traduce in un popup sovrimpresso, finchè lo stesso non verrà chiuso:

Con questa tecnica possiamo evitare di ricorrere alla navigazione tra pagine e richiedere l'input dell'utente in modo conveniente.

Alessandro

posted @ 21/01/2013 19:13 by Alessandro Del Sole

Windows Phone: selezionare un contatto dalla rubrica, da codice

Nelle app per Windows Phone si può avere necessità, per svariati motivi, di consentire all'utente la selezione di un contatto dalla rubrica di sistema. Questo si può fare attraverso uno dei c.d. choosers, in questo caso corrispondente alla classe Microsoft.Phone.Tasks.AddressChooserTask.

Si definisce un'istanza:

    Private contattoSelezionato As String
 
    Dim WithEvents addressChooser As AddressChooserTask
 
    Public Sub New()
        InitializeComponent()
        Me.addressChooser = New AddressChooserTask
     End Sub

Per lanciare il task, è sufficiente invocarne il metodo Show:

addressChooser.Show()

Per determinare il contatto restituito, si intercetta l'evento Completed e si legge il valore solo se l'utente ha confermato la scelta (valore TaskResult.OK dall'enumerazione TaskResult):

    Private Sub addressChooser_Completed(sender As Object, e As AddressResultHandles addressChooser.Completed
        If e.TaskResult = TaskResult.OK Then
            Me.contattoSelezionato = e.DisplayName
        End If
    End Sub

Oltre al nome del contatto (DisplayName) si può ottenere anche il suo indirizzo (Address) che poi è quello che effettivamente determina la differenza nella scelta dalla rubrica tra elementi appartenenti allo stesso contatto.

Alessandro

posted @ 21/01/2013 18:52 by Alessandro Del Sole

Windows Phone: forzare il binding delle TextBox prima di perdere il focus

In Windows Phone, quando una TextBox è collegata in data-binding a una proprietà di un oggetto, il suo aggiornamento viene fatto quando la stessa perde il focus. Come conseguenza, questa impostazione di default obbliga a fare un qualcosa che faccia perdere il focus al controllo prima di poter fare altre azioni.

Un esempio: tocco un pulsante sull'app bar per elaborare il valore di una TextBox, ma poiché questa non ha perso il focus esplicitamente, il valore non è aggiornato.

Sfortunatamente lo XAML di Windows Phone non prevede l'opzione UpdateSourceTrigger=PropertyChanged come in WPF e Silverlight, quindi l'alternativa è innanzitutto impostarlo come Explicit:

<TextBox Text="{Binding MiaProprietà, Mode=TwoWay, UpdateSourceTrigger=Explicit}" 
         TextChanged="TextBox_TextChanged_1"/>

Dopodiché, in un gestore di evento TextChanged si ottiene l'istanza del binding per la dependency property di interesse e si forza l'update:

    Private Sub TextBox_TextChanged_1(sender As Object, e As TextChangedEventArgs)
        If TypeOf (sender) Is TextBox Then
            Dim tb = CType(sender, TextBox)
            Dim binding = tb.GetBindingExpression(TextBox.TextProperty)
            If binding IsNot Nothing Then binding.UpdateSource()
        End If
    End Sub

In questo modo il problema è risolto.

Alessandro

posted @ 21/01/2013 18:45 by Alessandro Del Sole

Windows Phone e le icone del controllo DatePicker

Il Toolkit per Windows Phone contiene il controllo DatePicker, che vi permetterà, all'interno delle vostre app, di consentire all'utente la selezione di una data attraverso il consueto approccio di scorrimento di anno, mese e giorno.

By default, l'app bar del controllo mostra due pulsanti (uno per accettare la data e uno per annullare) le cui icone, però, vanno impostate a mano poiché, sempre per default, il controllo visualizza altrimenti una icona a forma di x.

Per risolvere il problema bisogna:

  • creare una cartella chiamata Toolkit.Content in Visual Studio.
  • aggiungere a questa cartella due file .png rappresentanti le icone, necessariamente chiamati applicationbar.cancel.png e applicationbar.check.png e che, ovviamente, abbiano una grafica corrispondente alla loro funzione.

A questo punto il DatePicker automaticamente riconoscerà la cartella aggiunta e utilizzerà le icone appropriate. Dettagli a cui fare attenzione soprattutto per la certificazione.

Alessandro

posted @ 21/01/2013 18:38 by Alessandro Del Sole

WinRT: Referenziare file da codice

Nelle Windows Store Apps può spesso capitare la necessità di raggiungere, da codice, un qualche file che abbiamo incluso nel package della nostra applicazione.

Questo è fattibile attraverso un'istanza della classe System.Uri e utilizzando un formato specifico di WinRT. Ad esempio, supponendo di avere un'immagine in una cartella chiamata Images del nostro progetto, da codice il riferimento si ottiene in questo modo:

Dim img As New Uri("ms-appx:///ProjectName/Images/MyImage.png")

Si utilizza quindi la forma msappx:/// seguita dal namespace di primo livello, dal nome della cartella (eventuale) e dal nome del file. E' importante aggiungere il namespace di primo livello del progetto (in questo esempio ProjectName) perché questo ci permetterà di raggiungere anche elementi facenti parte di un altro progetto nella soluzione, ma facente parte del package.

Alessandro

posted @ 18/01/2013 13:10 by Alessandro Del Sole

Linee guida per l'uso dei Microsoft account nelle Windows Store Apps

Se per caso vi venisse l'idea, come è venuta a me, di utilizzare i Live Services di Microsoft nelle vostre app per Windows 8 per poter accedere a cosette come SkyDrive e il calendario di Hotmail attraverso delle specifiche API, assicuratevi di:

  • installare l'ultima versione di Live SDK, ad oggi la 5.3, disponibile qui.
  • leggere le linee guida per l'implementazione delle funzionalità di sign-in e sign-out con il Microsoft account desiderato (precedentemente noto come Windows Live ID).
  • farvi sempre un giretto sul forum MSDN chiamato Live Connect, dove vengono comunicati nuovi rilasci ma, soprattutto, cose che magari non sono più disponibili o altre che lo diventano.
  • lasciar perdere di prendere alla lettera gli esempi che trovate sulla Code Gallery al riguardo, dato che non sono aggiornati alla v5.x e usano controlli non più disponibili e approcci non aderenti alle linee guida. Ho già perso abbastanza tempo io, almeno voi risparmiatevelo

Infine, ricordatevi di associare la vostra app ai Live Services prima di svilupparla.. potete farlo da qui.

Alessandro

posted @ 14/01/2013 21:45 by Alessandro Del Sole

Windows Phone: tile che spariscono nel controllo HubTile

Se state utilizzando il controllo HubTile del Windows Phone Toolkit e a un certo punto le varie tile animate iniziano a sparire in maniera random, sappiate che il problema è dovuto a una conversione matematica che non va correttamente su localizzazioni non en-US del sistema operativo.

Il problema e la relativa soluzione sono riportati qui. In parole povere, dovete scaricare i sorgenti del Toolkit, apportare la soluzione suggerita, ricompilare la soluzione e aggiornare il riferimento nella vostra app.

In attesa di un fix definitivo, intanto questo funziona

Alessandro

posted @ 13/01/2013 20:25 by Alessandro Del Sole

Windows Phone, background agents e l'errore "The drive cannot locate a specific area or track on the disk"

Se nelle vostre app per Windows Phone, specialmente versione 7.5, state implementando i background agents per eseguire delle attività in background, potreste incappare in un InvalidOperationException col seguente messaggio: The drive cannot locate a specific area or track on the disk.

Se doveste capitarvi, espandete My Project in Solution Explorer (o Properties per C#) e editate a mano il file WMAppManifest.xml in modo da verificare che, nella sezione Tasks, contenga il seguente nodo:

      <ExtendedTask Name="BackgroundTask">
        <BackgroundServiceAgent Specifier="ScheduledTaskAgent" Name="MyAgent" Source="MyAgent" Type="MyAgent.ScheduledAgent" />
      </ExtendedTask>

Potrebbe infatti capitare che non venga aggiunto di default quando referenziate il vostro background agent. Name e Source possono essere popolati col namespace del vostro agent, mentre Type rappresenta la classe che il Runtime dovrà istanziare per avviare l'agent.

Questo risolverà il problema.

Alessandro

posted @ 13/01/2013 15:49 by Alessandro Del Sole

Ricavare i feed RSS per pagine Facebook e Twitter

Spesso può essere utile analizzare i feed RSS di varie pagine per ottenere informazioni sulle ultime notizie. Facebook  e Twitter sono probabilmente tra i più interessanti e, in quanto tali, non hanno delle API specifiche

Fortunatamente è possibile ricavare i feed RSS 2.0, quindi formato XML, in maniera piuttosto semplice. Il seguente URL consente di ricavare il feed di una pagina Facebook (pagina, non profilo utente):

https://www.facebook.com/feeds/page.php?id=pageidnumber&format=rss20

Dove pageidnumber è l'id della pagina di interesse. Ad esempio, il feed della pagina Facebook di VB T&T è il seguente:

https://www.facebook.com/feeds/page.php?id=295804250449780&format=rss20

Per quanto riguarda Twitter, un feed si ricava in questo modo:

https://api.twitter.com/1/statuses/user_timeline.rss?screen_name=username

Dove username è il nome dell'utente che seguite. Ad esempio, il feed del profilo Twitter di VB T&T è questo:

https://api.twitter.com/1/statuses/user_timeline.rss?screen_name=vbtipsandtricks

Magari vi torna utile

Alessandro

posted @ 11/01/2013 19:31 by Alessandro Del Sole

Se le app per Windows 8 non vanno su Internet

Nel caso in cui vi colleghiate a Internet utilizzando una chiavetta 3G, può spesso accadere che le app per Windows 8 installate non vedano Internet, che siano vostre o prodotte da altri, nonostante all'interno di una connessione via cavo o Wi-Fi il tutto funzioni correttamente.

Senza stare a perdere troppo tempo e senza particolari domande, scaricate Fiddler 4 (il noto Web debugger) e cliccate su Win8 Config dalla toolbar.

Con questo tool, infatti, è possibile eliminare tutti i blocchi relativi al traffico di rete per le varie app. La seguente figura mostra come il tool si presenta:

Non vi resta che selezionare le app di vostro interesse oppure cliccare su Exempt All e poi su Save Changes.

Fatto!

Alessandro

posted @ 11/01/2013 19:00 by Alessandro Del Sole

L'app di Visual Basic Tips & Tricks per Windows Phone si rinnova

Dopo quasi due anni dalla sua prima uscita, l'app per Windows Phone del nostro network è stata rinnovata ed è ora disponibile sul Marketplace nella versione 2.0.

L'aggiornamento è stato reso necessario da diversi fattori, primo fra tutti il fornire notizie e contenuti provenienti dal nuovo portale e quindi con indirizzi diversi, oltre a voler proporre un nuovo layout che rispecchiasse la controparte per Windows 8; inoltre, la dismissione del sito WPF Tips & Tricks ha consentito di avere elenchi unici per VB T&T e LightSwitch T&T.

Vi mostro un paio di immagini. La pagina iniziale è ora la seguente, quindi non c'è più da scegliere il sito di interesse (dal momento che l'app aggrega di default i contenuti da entrambi i siti):

Per quanto riguarda i contenuti, li vedrete in maniera simile al passato solo che ora, come detto, vengono fusi i contenuti delle due community:

Questa volta ho utilizzato il pattern Async/Await che mi ha consentito di fare un refactoring del codice davvero sostanziale, ottenendo risultati molto buoni soprattutto dal punto di vista della gestione dei dati.

Vi anticipo che nei prossimi giorni arriverà un altro aggiornamento all'app (non è stato possibile modificare la submission in corso), che renderà ancora migliori le performance in fase di caricamento, che fixerà alcuni aspetti del layout e che, sperando sia la volta buona, dovrebbe implementare le notifiche di nuovi contenuti.

Oltre che dal device, la potete scaricare da qui. Fateci sapere cosa ne pensate!

Alessandro

posted @ 11/01/2013 12:12 by Alessandro Del Sole

WinRT: Implementare i background task

Sempre a proposito di background task nelle app per Windows 8, vi segnalo due gran bei post del mitico Matteo Pagani:

How to create and debug a background task in Windows 8 - part 1

How to create and debug a background task in Windows 8 - part 2

Complimenti a Matteo, sempre un grande.

Alessandro

posted @ 11/01/2013 02:26 by Alessandro Del Sole

WinRT: Errore 0x8002802B nel debug dei background task

Se state implementando i background task in WinRT per dare notifiche all'utente su aggiornamenti per la vostra app, e doveste imbattervi nel seguente errore:

Element not found. (Exception from HRESULT: 0x8002802B (TYPE_E_ELEMENTNOTFOUND))".

E' perché probabilmente avete messo un punto di interruzione sulla seguente riga di codice:

Await BackgroundExecutionManager.RequestAccessAsync()

Provate a metterlo sulla riga successiva.. a questo punto dovrebbe andare tutto bene.

Alessandro

posted @ 11/01/2013 02:00 by Alessandro Del Sole

Windows Store Apps: testarle su più dispositivi

Approfitto di un precedente commento a un mio post per chiarire un aspetto relativo al test delle proprie Windows Store Apps.

Sulla macchina di sviluppo, avete Visual Studio 2012 quindi vi basta premere F5 per eseguirle localmente o nel simulatore (oltre al debug completo) e fin qui... Avete anche l'opportunità di fare il debug remoto su tablet. E fin qui...

Supponiamo però che vogliate provare l'app su un'altra macchina, senza volerne fare il debug, oppure magari darla a un vostro tester. Passare i file "sfusi" serve a poco, anche perché poi c'è il certificato sulla macchina di sviluppo che andrebbe riprodotto e installato. Non dovete far altro che creare l'app package esattamente come fareste al momento della submission al Windows Store, quindi: 

Se avete Visual Studio 2012 Professional o superiore, selezionate Project -> Store -> Create App Packages

Se avete Visual Studio 2012 Express for Windows 8, selezionate Store -> Create App Packages

Nella prima dialog del Wizard, specificate di non inviare il package allo Store:

Nella seconda dialog, specificate versione e architettura (se necessario):

Una volta che il package è stato generato, aprite la relativa cartella (il suo link vi viene fornito nella dialog finale). Troverete una sottocartella il cui nome finisce con _Test. Passate il contenuto dell'intera cartella sull'altra macchina (o al vostro tester) e lanciate lo script di PowerShell, chiamato Add-AppDevPackage.ps1 per installare l'app. Questo script si occuperà anche di installare il certificato di test. A questo punto potrete provare la vostra app su tutti i vostri dispositivi.

Alessandro

posted @ 05/01/2013 22:19 by Alessandro Del Sole

Usare Async con Visual Studio 2012 in Windows Phone 7.5 e .NET 4

E' stato recentemente rilasciato un nuovo targeting pack che permette di utilizzare il pattern Async/Await e le relative keyword anche con Windows Phone 7.5 e .NET 4. Questo, però, vale solo per Visual Studio 2012 e può esservi estremamente utile se avete app esistenti, che non volete migrare a versioni nuove delle piattaforme, ma che volete rivisitare col nuovo pattern.

Per utilizzarlo, il procedimento è molto semplice. Supponendo di avere un progetto Windows Phone 7.5 o .NET 4, in Visual Studio 2012 si utilizza NuGet (Tools -> Library Package Manager -> Manage NuGet Packages for Solution). Dovete cercare il package chiamato Async for .NET Framework 4, Silverlight 4 and 5, and Windows Phone 7.5 oppure digitando nel campo di ricerca il nome Microsoft.Bcl.Async:

Trattandosi di una beta, è fondamentale la selezione dell'opzione Include Prerelease come evidenziato in figura.

Una volta installato il package, potrete usare Async e Await nel modo che già conoscete. E, se non lo conoscete, non perdetevi la serie di video dedicati su Visual Basic Tips & Tricks oppure il mio libro di prossima uscita, VB 2012 Unleashed.

Alessandro

posted @ 05/01/2013 21:56 by Alessandro Del Sole

Debug di Windows Store Apps su tablet con Windows RT

Se avete un tablet con Windows RT, la versione di Windows 8 dedicata ad architetture ARM, potrebbe essere una buona idea testare le vostre app anche su questo dispositivo prima di inviarle alla certificazione.

Infatti, è il modo migliore per essere certi che le app si comportino come desiderato. Per fare questo, è necessario dapprima installare sul tablet i componenti di Remote Debugging di Visual Studio 2012. Potete scaricarli da questo indirizzo. Assicuratevi di scaricare quelli per processore ARM, quindi vi conviene farlo direttamente dal tablet.

Per i più precisi, si tratta di componenti che possono funzionare sulla parte Desktop di Windows RT  Si dà anche per assunto il fatto che il device sia nella rete.

Una volta installati, va lanciato il tool chiamato Remote Debugger:

Al suo primo avvio è probabile che vengano rilevati conflitti nella configurazione, ma le soluzioni vengono automaticamente suggerite ed è bene accettarle:

A questo punto il debugger remoto rimane in ascolto, finché dalla macchina desktop non viene fatto partire qualcosa:

In Visual Studio 2012, supponendo di avere già un progetto di Windows Store App aperto, nelle opzioni di avvio selezioniamo Remote Machine. A questo punto sarà possibile selezionare un dispositivo nella nostra rete:

Fatto questo, se avviamo l'applicazione da Visual Studio 2012, questa verrà eseguita nel tablet ma con gli strumenti di debug utilizzabili sulla macchina di sviluppo.

Alessandro

posted @ 02/01/2013 20:12 by Alessandro Del Sole

Fatti un regalo di Natale: associati a VB T&T e accedi alla formazione

Come sapete, da qualche anno Visual Basic Tips & Tricks è anche associazione culturale. Con tale forma giuridica e le quote associative siamo riusciti non solo ad organizzare delle interessanti attività, ma anche a garantire la continuità dei servizi offerti dalla community, soprattutto laddove si è reso necessario acquistare una nuova infrastruttura hardware e software (e per questo approfitto per ringraziare i soci).

Non voglio tediarvi sul discorso associativo, per il quale vi rimando alla nostra pagina, però vi voglio evidenziare alcuni vantaggi: ai nostri soci abbiamo fatto avere licenze di software utile allo sviluppo e oggi siamo ad offrire una nuova opportunità riservata, ossia la possibilità di fruire dei corsi online Campus MVP a un prezzo scontato del 35%.

Questa realtà eroga corsi online preparati da molti Microsoft MVP, tra cui il sottoscritto per WPF, destinati non solo alla preparazione agli esami di certificazione, ma contenenti molti trucchi provenienti dall'esperienza pratica.

Quindi, fatevi un regalo di Natale: sostenete la Vostra community  Partecipare alle assemblee dei soci vi darà anche un'altra opportunità di incontrarci e di conoscere di persona altri appassionati.

Alessandro

posted @ 19/12/2012 13:22 by Alessandro Del Sole

Utilizzare lo Storage di Windows Azure da app Windows 8

Vi segnalo un breve ma esaustivo post di uno dei miei miti di sempre, Cristian Civera, il quale ci introduce all'utilizzo dello Storage di Windows Azure dall'interno di Windows Store Apps.

Con la sempre più importante crescita e maggiore diffusione della piattaforma di Windows Azure, anche il servizio di memorizzazione "in the cloud" riveste un ruolo di sempre maggiore interesse, soprattutto per quel tipo di app che hanno bisogno di uno spazio di archiviazione sempre disponibile.

Grande Cristian, sempre chiaro e preciso.

Alessandro

posted @ 17/12/2012 00:04 by Alessandro Del Sole

Tutorial video per sviluppare su Windows 8 con VB

Parafrasando qualcuno, noi di VB non siamo una razza in via di estinzione  Su Channel 9, il canale multimediale di Microsoft per sviluppatori, è in corso di pubblicazione una serie di video dedicati allo sviluppo di app per Windows 8 con Visual Basic. Per ora ci sono le seguenti 4 parti:

  1. Create a Hello World App
  2. Manage app lifecycle and state
  3. Navigation layout and views (1 e 2)
  4. File access and pickers

Vi consiglio di seguire il Tag VB su Channel 9 per rimanere aggiornati sulle prossime pubblicazioni.

Alessandro

posted @ 17/12/2012 23:57 by Alessandro Del Sole

LightSwitch 2012 e MySQL

Molti sviluppatori che usano LightSwitch spesso chiedono come fare a usare il tool di casa Microsoft con database MySQL.

Nella prima versione di LightSwitch, oltre a scaricare un apposito connector per Entity Framework e MySQL, bisognava scrivere del codice per far si che i dati venissero salvati correttamente. Ve ne parlai in questo vecchio post.

Con LightSwitch 2012 c'è un miglioramento importante, ossia non è più necessario intervenire sul codice di salvataggio dei dati ma è sufficiente utilizzare l'ultima versione del Connector MySQL per .NET (almeno la v 6.6.4). Una volta installato, i database MySQL verranno visti come una qualunque altra sorgente dati e si potranno definire entità, business logic, screen alla solita maniera.

Alessandro

posted @ 16/12/2012 19:50 by Alessandro Del Sole

Annullare operazioni asincrone con HttpClient.GetStringAsync

Vi segnalo questo post di Lucian Wischik, uno dei "padri fondatori" del pattern Async/Await, in cui discute come implementare l'annullamento di un'operazione asincrona avviata dal metodo GetStringAsync della classe HttpClient, nuova in .NET 4.5.

Il post spiega perché usare la nuova classe in luogo della vecchia WebClient. Approfitto per farvi sapere che questo argomento fa parte anche del mio libro Visual Basic 2012 Unleashed, di imminente uscita.

Alessandro

posted @ 16/12/2012 19:42 by Alessandro Del Sole

WinRT: Esempio di serializzazione per Windows 8

Molto spesso le nostre app per Windows 8 hanno la necessità di memorizzare informazioni su disco in fase di chiusura o sospensione, e poterle recuperare in fase di avvio o resume. Windows 8 non ha l'Isolated Storage, per cui ci viene suggerito di usare il namespace Windows.Storage per la gestione di file locali. Questo comporta l'utilizzo di tecniche di serializzazione.

Ci sono diverse metodologie, oggi ne vediamo una piuttosto semplice. Supponiamo di avere una classe che rappresenti un qualcosa e che la nostra app debba memorizzare una collection di oggetti di questo tipo. La classe:

Imports System.Runtime.Serialization

 

<DataContractPublic Class MyItem
    <DataMemberPublic Property MyStuff As String
    <DataMemberPublic Property MyCounter As Integer
End Class

Al di là del significato puramente dimostrativo della classe, focalizziamo l'attenzione sul fatto che sia marcata come DataContract e le sue proprietà come DataMember, sfruttando attributi del namespace System.Runtime.Serialization. Questo è richiesto per far si che l'oggetto sia serializzabile.

Ora vediamo come salvare su disco un file locale contenente una ObservableCollection(Of MyItem):

    Shared Async Function CreateDataFileAsync(theData As ObservableCollection(Of MyItem)) As Task
        Try
            Dim file = Await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync("MyData.bin",
                                                                                                 Windows.Storage.CreationCollisionOption.ReplaceExisting)
            Dim write = Await file.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite)
            Using write.GetOutputStreamAt(0)
                Dim serializer As New DataContractSerializer(GetType(ObservableCollection(Of MyItem)))
                serializer.WriteObject(write.AsStreamForWrite, theData)
            End Using
        Catch ex As Exception
 
        End Try
    End Function

La classe ApplicationData rappresenta l'insieme di dati che fanno capo all'app, la sua proprietà Current rappresenta l'istanza attiva dell'app, LocalFolder rappresenta la cartella locale dell'applicazione, il metodo CreateFileAsync crea il file specificato in modalità asincrona (da qui l'utilizzo con Await) mentre l'enum CreationCollisionOption permette di stabilire se il file debba essere sovrascritto se esistente (ReplaceExisting), aperto se esistente (OpenIfExists), generato con nome univoco (GenerateUniqueName) o se debba essere sollevata un'eccezione (FailIfExists). Il risultato è un tipo Windows.Storage.StorageFile, il cui metodo OpenAsync permette l'apertura del file come stream. Attraverso un'istanza della classe DataContractSerializer si ottiene un oggetto serializzabile all'interno di uno stream il cui punto di ingresso è ottenuto attraverso il metodo GetOutputStreamAt. Infine, l'oggetto viene scritto attraverso il metodo DataContractSerializer.WriteObject, che necessita di una conversione in stream per scrittura dell'oggetto StorageFile ottenuto precedentemente.

La lettura del file avviene in modo abbastanza simile:

    Shared Async Function ReadDataFileAsync() As Task(Of ObservableCollection(Of MyItem))
        Try
            Dim file = Await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync("MyData.bin")
            Dim theData As ObservableCollection(Of MyItem)
            If file IsNot Nothing Then
                Using session = Await file.OpenAsync(Windows.Storage.FileAccessMode.Read)
                    Dim serializer As New DataContractSerializer(GetType(ObservableCollection(Of MyItem)))
                    Dim data = serializer.ReadObject(session.AsStreamForRead)
                    theData = CType(data, ObservableCollection(Of MyItem))
                End Using
                Return theData
            Else
                Return Nothing
            End If
 
        Catch ex As Exception
            Return Nothing
        End Try
    End Function

Differenze principali: l'utilizzo di GetFileAsync per aprire il file in lettura, del metodo DataContractSerializer.ReadObject per deserializzare l'oggetto e la conversione dello StorageFile in stream per lettura. I dati deserializzati vengono convertiti nel tipo appropriato e restituiti al chiamante.

Un esempio d'uso:

Await CreateDataFileAsync(MyCollection)

I vari template di progetto per Windows 8 che includono la classe SuspensionManager, offrono ulteriori esempi di serializzazione, dimostrando come persistere e ripristinare lo stato dell'app. Quindi, vi consiglio di consultare anche quel codice.

Alessandro

posted @ 16/12/2012 18:56 by Alessandro Del Sole

Visual Basic - La diagnosi medica con l'ausilio di un computer

Da sempre il computer è stato visto come un sostituto dell'uomo per realizzare operazioni ripetitive, noiose ma, prive di qualsiasi forma di intelletto. Ovvero, il PC è veloce ma "stupido". In effetti quanto detto è ancora vero, dato che tutto quello che un PC riesce a fare è solo opera di chi lo ha programmato, perfino gli errori non gli sono attribuibili. IL Dott. Giorgio Fiore, partendo dalla versione 7.1 del Quick Basic è riuscito, non a rendere intelligente un PC, ma a fargli fare qualcosa di differente dai soliti calcoli matematici, statistici e contabili. Perché non usarlo, il computer, per aiutare il Medico nella determinazione della diagnosi medica? L'opera allora, erano i primi anni 90', sembrava una stupidata o quasi. Il PC non può ragionare, quindi, non sarà mai in grado di operare una diagnosi che vuole proprio nel ragionamento medico il suo punto di forza (**Dott. Augusto Murri). Invece è possibile, basta separare la logica dal mero calcolo matematico! Abbbiamo realizzato una versione scritta in VB.NET (2012) del famoso software del Dott. Fiore e funziona egregiamente. Anche IBM, usando il suo super computer Watson ed un programma commissionato a Nuance ha realizzato un programma simile nello scopo ma molto differente nel modo di realizzare la diagnosi. IBM, ovviamente non solo non è per noi concorrenza ma, anzi, grazie al suo prestigioso nome, ha reso più credibili software di questo genere. "Se lo ha fatto IBM allora deve essere valido!" In concreto: il software si basa sul ragionamento logico che un Medico dovrebbe fare al letto del Malato. Tradotto in computerese: insiemistico e statistico. Insiemistico, perche ogni sintomo è legato ad un certo numero di malattie ed io posso vedere se queste malattie sono comuni in più sintomi rilevati sul Paziente. Statistico, perché ogni sintomo ha un valore patologico, ovvero un valore che lo rende più o meno importante al fine della determinazione di una corretta diagnosi. Esempio matematico: rilevo sul paziente 3 sintomi di cui 2 hanno in comune la medesima malattia (insiemistica). Allora è probabile che quella sia la malattia presentata dal Paziente, in base al valore patologico dei due sintomi posso decidere la probabilità che effettivamente sia questa la diagnosi corretta (statistica). Ovviamente quanto sopra è solo un esempio semplificato al massimo, ma il concetto è questo. Il programma: il programma, dato che si basa su concetti espressi dalla comune matematica, risulta fattibile e anche tutto sommato facile da programmare. Ma allora dove sta tutto il lavoro? Il grosso del lavoro sta nella realizzazione del database che contiene sintomi, malattie e esami di laboratorio. Il cervello del Medico, quello che un PC non può avere, è proprio inserito nel database che contiene un elenco vastissimo di sintomi e malattie e, la logica del Medico risulta da come questi sintomi/malattie siano stati collegati fra di loro e sull'importanza data ad ognuno dei sintomi nel predire la malattia. Esempio logico: se vado dal Medico e lamento uno stato febbrile (sintomo), il Medico o tenta di indovinare in base alle malattie stagionali o non sarà in grado di realizzare una diagnosi perché il sintomo febbre è legato ad un vastissimo numero di malattie (valore patologico bassissimo). se vado dal medico lamentando un peso al petto costante, il Medico potrebbe pensare ad un problema cardiaco ma senza assolutamente esserne sicuro (valore patologico medio-basso). se vado dal Medico lamentando un appendice palpabile (valore patologico alto) ovviamente il Medico penserà subito ad una apendicite cronica, in quanto il sintomo è *patognomonico per questa malattia. Conclusione: il Dott. Fiore ha pensato di lasciare il semplice calcolo matematico al Computer (chi meglio) e la logica del Medico è stata inserita nel database. Il tutto è stato possibile realizzando il programma in pochi mesi e per il database in circa 20 anni di lavoro e, dato che è sempre aggiornabile, ancora non abbiamo concluso. Perché parlarne in questa sede, semplice, perchè il software è stato interamente, e da sempre, realizzato con il Linguaggio per computer denominato Basic. Dimostrazione che con questo linguaggio si possono realizzare software professionali ed altamente innovativi. Ing. Emilio Scaccaglia - emilio.scaccaglia@alice.it Dott.ssa Laura Mutti - mutti.lura@libero.it per maggiori informazioni: www.ipotesidiagnostica.it - www.es-systems.it Legenda: * Patognomonico è un termine medico (derivato dal sostantivo greco pathos = malattia e dal verbo greco ghignosko = conoscere, riconoscere) che si riferisce a segni o sintomi che consentono di riconoscere una malattia, nel senso che sono associati univocamente ad essa, cioè tipici di essa e non di altre. Si può distinguere tra: Sintomo patognomonico imperfetto: la presenza di questo tipo di sintomo indica la certezza della malattia, ma l'assenza del sintomo non indica l'assenza della malattia; Sintomo patognomonico perfetto: la presenza di questo tipo di sintomo indica la certezza della malattia, e l'assenza del sintomo indica l'assenza della malattia. ** Augusto Murri (Fermo, 8 settembre 1841 – Bologna, 11 novembre 1932) è stato un medico italiano. È considerato uno dei più grandi clinici del suo tempo, autore di una vastissima attività scientifica.

posted @ 12/12/2012 13:59 by Emilio Scaccaglia

Aperte le iscrizioni ai Community Days 2013

CommunityDays.it

Sono aperte le iscrizioni ai Community Days 2013, l'evento community più importante dell'anno e organizzato dagli User Group italiani che si occupano di tecnologie Microsoft. Le date di svolgimento sono il 27 e il 28 febbraio p.v. a Peschiera Borromeo (MI) presso Microsoft.

I posti sono limitati, quindi affrettatevi a garantirvi la vostra presenza registrandovi. E' anche online la prima bozza di agenda, che potrebbe essere soggetta a modifiche ma che vi dà già un'idea del livello della conferenza.

Il sottoscritto vi parlerà di Visual Studio LightSwitch 2012 congiuntamente al nuovo client HTML5 e alle possibilità con Windows Azure.

Visual Basic Tips & Tricks supporta l'evento e collabora alla sua organizzazione, per cui qualora aveste bisogno di info non esitate a contattarci.

Alessandro

posted @ 08/12/2012 19:16 by Alessandro Del Sole

Visual Studio Modern Image Library

Microsoft ha rilasciato una nuova libreria di icone e immagini, da poter usare nelle proprie applicazioni, create secondo i dettami della Modern UI, quella che caratterizza Windows 8 e Windows Phone per intenderci.

Molte delle nuove icone, inoltre, rispecchiano le controparti che troviamo in Visual Studio 2012 e Office 2013.

Lo zip di circa 5 Mb è scaricabile da qui. E' indubbiamente da scaricare se le nostre applicazioni vogliono adattarsi allo stile grafico contemporaneo.

Alessandro

posted @ 04/12/2012 11:36 by Alessandro Del Sole

Visual Studio 2012 Update 1

Ieri Microsoft ha rilasciato il primo importante aggiornamento per Visual Studio 2012, chiamato Visual Studio 2012 Update 1.

Come annunciato da Somasegar nel suo post, questo aggiornamento introduce miglioramenti per lo sviluppo di Windows Store app, per SharePoint e per chi usa gli strumenti di sviluppo in team (come TFS).

Di particolare interesse sono la possibilità di avere come target anche Windows XP per applicazioni scritte in C++, supporto per il debugging misto nella modalità native/managed e il dump nativo su architettura ARM. Per chi sviluppa per Windows Phone, questo aggiornamento aggiunge il supporto agli strumenti di code analysis.

Vi rimando al post di Soma per i dettagli ed al link per il download.

Alessandro

posted @ 27/11/2012 16:49 by Alessandro Del Sole

Microsoft Windows 8: qualche novit&agrave; nascosta

Da HardwareUpgrade un interessante articolo con le novità sotto il cofano di Windows 8, interessanti anche per gli sviluppatori:

Approfondiamo alcune caratteristiche poco visibili ma comunque rilevanti di Windows 8: oltre alla nuova interfaccia utente e alle app ci sono altre caratteristiche interessanti.

Qui l’articolo completo.

posted @ 27/11/2012 04:22 by Sergio Pappalardo

WinRT e la Clipboard

Accedere ai famosi appunti di Windows, la Clipboard, è una delle operazioni più comuni in ogni contesto applicativo.

Nelle app per Windows 8 questo è ancora possibile, sebbene ci siano alcune differenze negli oggetti che si usano e negli elementi che si possono memorizzare.

La gestione della Clipboard è demandata alla classe Clipboard esposta dal namespace Windows.ApplicationModel.DataTransfer. Chi ha avuto esperienza di sviluppo per Windows 8 può già notare una cosa: il namespace Windows.ApplicationModel.DataTransfer è lo stesso che si usa con lo Share contract, quello attraverso cui condividiamo contenuti con altre app o col sistema operativo.

Ciò implica che gli oggetti che vengono memorizzati nella o recuperati dalla Clipboard sono packages di tipo Windows.ApplicationModel.DataTransfer.DataPackage, proprio quello utilizzato nello Share.

Quindi?  Si crea un'istanza di questo oggetto, lo si popola con ciò che si vuole memorizzare, si passa tale istanza all'oggetto Clipboard. Il seguente esempio mostra come memorizzare del testo:

        Dim pkg As New DataPackage
        pkg.SetText("Some text to the Clipboard")
 
        Clipboard.SetContent(pkg)

Altri metodi il cui nome è piuttosto chiaro, tipo SetBitmap, SetRtf, SetUri, SetHtmlFormat (più altri complessi) permettono di memorizzare diverse tipologie di contenuti. Altri piccoli esempi:

        'Memorizza un Uri
        pkg.SetUri(New Uri("http://www.visual-basic.it"))
        'Memorizza Html
        pkg.SetHtmlFormat("<span style=""font-size:10px;"">Some Html</span>""")

Per leggere il contenuto della Clipboard si utilizza dapprima il metodo Clipboard.GetContent, che restituisce un oggetto DataPackageView, quindi in modalità asincrona si attende il risultato di uno dei metodi preposti, il cui nome termina con Async come nel seguente esempio:

    Private Async Function ReadClipboard As Task
        Dim content As DataPackageView = Clipboard.GetContent()
        Dim result = Await content.GetTextAsync
        'Elabora il testo qui...
    End Function

Chiaramente è possibile predeterminare il tipo di contenuto nella Clipboard, sfruttando il metodo DataPackageView.Contains, il cui argomento è una stringa che rappresenta il formato. Fortunatamente non c'è da ricordare i formati, poiché la classe StandardDataFormats mette a disposizione proprietà che semplificano il compito:

    Private Async Function ReadClibpoard() As Task
        Dim content As DataPackageView = Clipboard.GetContent
        If content.Contains(StandardDataFormats.Text) Then
            Dim text = Await content.GetTextAsync
            'Elabora il testo...
        ElseIf content.Contains(StandardDataFormats.Html) Then
            'Elabora l'Html...
        End If
    End Function

La documentazione MSDN aiuta poi a capire meglio l'interazione con oggetti complessi come ad esempio le Bitmap o le risorse.

Alessandro

posted @ 24/11/2012 16:19 by Alessandro Del Sole

WinRT: Introduzione all'uso di Bing Maps

Poche settimane fa è stato rilasciato il Bing Maps SDK, che permette di utilizzare le mappe di Bing all'interno delle nostre app per Windows 8.

In questo post faremo un'introduzione all'uso di questo SDK, cercando di capire cosa serve e i passaggi principali.

L'SDK può essere scaricato come file VSIX dal link di cui sopra, oppure direttamente dall'Extension Manager di Visual Studio 2012. Per poter utilizzare le Bing Maps all'interno delle proprie app, è dapprima necessario registrarsi e dotarsi di un token, ossia di credenziali in assenza delle quali le mappe non funzionano. Il procedimento va fatto da questo indirizzo: https://www.bingmapsportal.com/

Il tipo di account che dovrete scegliere è quello Basic, specificando, come tipologia di applicazione, Windows Store App:

Memorizzate poi da qualche parte il vostro token. Si passa poi a Visual Studio 2012, ovviamente anche Express per Windows 8, dove supponiamo di avere un progetto vuoto. Per usare le mappe ci sono da fare due cose:

  • impostare l'architettura del processore a x86 nella configurazione corrente, questo perché l'SDK non supporta, in sviluppo, architetture x64 e ARM. Questo si può fare nella finestra Configuration Manager.
  • aggiungere un riferimento a Bing Maps e al Microsoft Visual C++ Runtime Package, come in figura:

A questo punto potrete trascinare dalla toolbox il controllo Map dalla Toolbox sul designer, come in figura:

Il controllo Map può essere completamente gestito in modalità dichiarativa, quindi XAML, nel caso in cui vogliate predisporre una mappa già completa di tutti gli elementi. Spesso, però, vi capiterà di determinare un punto sulla mappa a seconda di una scelta dell'utente, cosa che dovrete fare da codice managed e che vedremo in questo post. Ad ogni buon conto, una volta che il controllo si trova nel designer, sarà definito in modo simile al seguente:

<Maps:Map Name="Map1" Credentials="YOUR TOKEN HERE" ZoomLevel="15" Grid.Row="1" />

Due note veloci: la proprietà Credentials deve contenere il token ricevuto in fase di registrazione sul portale per sviluppatori Bing. Il nome del controllo deve essere specificato manualmente, così come il posizionamento all'interno di altri contenitori. ZoomLevel è una proprietà che permette di impostare il livello di zoom della mappa, 15 è stato specificato da me ed è un buon compromesso di visibilità.

Definiamo anche un TextBlock banale, che ci permetterà più avanti di visualizzare ulteriori info:

<

TextBlock Name="DistanceTextBlock" />

Normalmente si ha necessità di determinare la posizione corrente, ad esempio tramite il dispositivo GPS di un tablet, cosa che si fa nella prima pagina dell'app affinché Windows chieda all'utente il permesso di utilizzare questa caratteristica, per ragioni di privacy. Questo non è strettamente legato alle mappe di Bing, poiché è offerto dal namespace Windows.Devices.Geolocation, ma serve. Ad esempio quando si apre la pagina dell'app potremmo avere:

    Dim locator As Geolocator
    Dim currentPosition As Bing.Maps.Location

 

    Protected Overrides Sub LoadState(navigationParameter As Object, pageState As Dictionary(Of StringObject))         If Me.locator Is Nothing Then Me.locator = New Geolocator         AddHandler Me.locator.PositionChanged, AddressOf locator_PositionChanged     End Sub

La classe Geolocator permette di interagire col dispositivo di localizzazione. Si sottoscrive l'evento PositionChanged che viene sollevato quando la posizione del dispositivo cambia. Tale evento è gestito da un metodo che, attraverso l'utilizzo del dispatcher, rileva latitudine e longitudine della nuova posizione grazie all'oggetto PositionChangedEventArgs, elementi che vanno a costituire gli argomenti dell'istanza di un oggetto di tipo Bing.Maps.Location:

    Private Async Function locator_PositionChanged(sender As Geolocator, args As PositionChangedEventArgsAs Task
        Await Me.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
                                     New DispatchedHandler(Sub()
                                                               'Richiede una direttiva Imports Bing.Maps
                                                               Dim location As New Location(args.Position.Coordinate.Latitude,
                                                                                            args.Position.Coordinate.Longitude)
                                                               Me.currentPosition = location
                                                           End Sub))
 
    End Function

Ipotizzando poi che l'utente abbia specificato latitudine e longitudine del posto da raggiungere (probabilmente sceglierà un oggetto da voi predisposto e tale oggetto conterrà tali informazioni), la modalità per creare un punto sulla mappa è la seguente:

        Dim location As Bing.Maps.Location
 
        location = New Bing.Maps.Location(item.Latitudine, item.Longitudine)
        Me.Map1.Center = location
        Me.Map1.SetView(location)
        Me.AddPushpin(location, "1")

La mappa viene centrata sulle due coordinate attraverso la proprietà Center e il posizionamento tramite SetView. E' anche disponibile la proprietà MapType che riceve un valore dall'enumerazione Bing.Maps.MapType (Aerial, Road, Birdseye, Empty) che consente di impostare da codice la modalità di visualizzazione della mappa (es. aerea piuttosto che stradale) e che comunque l'utente può cambiare attraverso comandi nel controllo. Si può utilizzare un oggetto Pushpin, che serve a evidenziare con un "bollino blu" il punto di interesse. A tale riguardo predisponiamo questo metodo:

    Private Sub AddPushpin(location As Bing.Maps.Location, text As String)
 
        Dim pushpin As New Bing.Maps.Pushpin With {.Text = text}
        Bing.Maps.MapLayer.SetPosition(pushpin, location)
 
        Me.Map1.Children.Add(pushpin)
    End Sub

L'oggetto Pushpin ha una proprietà Text che può contenere un carattere come un numero o una lettera. Fatto questo, potremmo voler visualizzare in un controllo TextBlock la distanza dalla posizione attuale a quella evidenziata nella mappa. Poiché il punto in questione è rappresentato dalle due coordinate latitudine e longitudine, e che queste sono poco user-friendly, può essere utile avere a disposizione un metodo che le converta in una distanza in KM dal punto corrente. Vi riporto la traduzione in Visual Basic di metodi che ho trovato su questo http://www.geodatasource.com/developers/c-sharp:

    Public Function CalculateDistance(lat1 As Double, lon1 As Double, lat2 As Double, lon2 As Double, unit As CharAs Double
 
        Dim theta As Double = lon1 - lon2
        Dim dist As Double = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) + Math.Cos(deg2rad(lat1)) * Math.Cos(deg2rad(lat2)) * Math.Cos(deg2rad(theta))
        dist = Math.Acos(dist)
        dist = rad2deg(dist)
        dist = dist * 60 * 1.1515
        If unit = "K"c Then
            dist = dist * 1.609344
        ElseIf unit = "N"c Then
            dist = dist * 0.8684
        End If
        Return dist
    End Function
    Private Function deg2rad(deg As DoubleAs Double
        Return (deg * Math.PI / 180.0)
    End Function
    Private Function rad2deg(rad As DoubleAs Double
        Return (rad / Math.PI * 180.0)
    End Function

Ipotizzando di voler scrivere le informazioni sulla distanza di seguito all'impostazione del punto sulla mappa, il codice di assegnazione del punto sulla mappa può essere esteso con questo:

Dim distance = CalculateDistance(currentPosition.Latitude, currentPosition.Longitude, location.Latitude, location.Longitude, "K"c)
 
Me.DistanceTextBlock.Text = "Distanza dalla posizione attuale: " + CInt(distance).ToString + " KM"

L'utilizzo del literal "K" indica che vogliamo una conversione in KM. La conversione in intero avviene per arrotondare il valore Double. Ovviamente questo calcolo non è sempre necessario né lo è l'utilizzo del GPS integrato, però è utile averlo a disposizione quanto meno come snippet.

Nel caso decidiate però di usare il servizio di localizzazione, ricordatevi di specificarlo nelle capabilities del manifesto dell'app, pena errore in fase di certificazione:

Le mappe di Bing offrono possibilità infinite. Questo post ha solo introdotto tali possibilità, l'obiettivo non era di certo essere la bibbia ma dare un punto di partenza e qualche indicazione soprattutto a chi sviluppa in VB.

Alessandro

posted @ 23/11/2012 00:32 by Alessandro Del Sole

Windows 8 Store Apps, logo e contrasti tra colori

Quando si dice che le guidelines per la pubblicazione di app per Windows 8 vanno seguite alla lettera, è proprio così

Se dovesse capitarvi il seguente errore in fase di test con lo strumento Windows App Cert Kit: "The contrast ratio of the background color and foreground text color is 1. This ratio should be greater than or equal to 1.5" e non sapete dove sbattere la testa, sappiate che il problema risiede nel manifest dell'applicazione (file Package.Appxmanifest), in particolare nella selezione dei colori relativi al logo di startup.

Ad esempio, se è selezionato il tema di primo piano Light, il colore di background non può essere bianco (hex #FFFFFF) o una tonalità che si avvicini al bianco. Analogamente, se il tema di primo piano è Dark il colore di sfondo non può essere nero (hex #000000) o simile.

Il tool di certificazione è infatti in grado di rilevare questa divergenza. Il messaggio di errore non aiuta molto e i report sulla certificazione men che meno, quindi fate attenzione a queste cose.

Alessandro

posted @ 23/11/2012 18:26 by Alessandro Del Sole

Pubblicare un NuGet Server personalizzato su Azure

Qualche tempo fa avevo spiegato come realizzare il proprio server NuGet da usare come repository per le proprie librerie così da referenziarle facilmente nei propri progetti.

Di per sé già questo è un ottimo sistema per gestire efficacemente la distribuzione delle proprie librerie, ma i vantaggi aumentano sensibilmente se decidiamo di pubblicarlo su Windows Azure, in particolare sfruttando uno degli ultimi servizi introdotti nella piattaforma, ovvero i Web Sites (ad oggi ancora in preview).

Vediamo come pubblicare un web site su Azure:

1) Innanzitutto bisogna aver un account su www.windowsazure.com. Se avete un abbonamento MSDN avete incluso un piano gratuito in base al livello di licenza sottoscritto, altrimenti è possibile utilizzare una versione di prova di 90 giorni;

2) Creiamo un server NuGet personalizzato;

3) Dopo aver verificato che l'applicazione web funzioni, bisogna preparare il web site su Azure per il deploy. Quindi accediamo al portale e creiamo un nuovo Web Site:

 

 

 

4) In pochi secondi viene creato un Website pronto per l'uso e potremmo pubblicare immediatamente il nostro progetto web via ftp, come faremmo con un normale spazio web in hosting. Windows Azure però ci mette a disposizione la possibilità di fare il deploy direttamente da Visual Studio 2012 utilizzando la funzionalità di Publish.
Per configurare correttamente tutti i dati, accediamo al nostro Web Site creato al punto (3) e scarichiamo il file di configurazione del Publish:

 

 

5) Verrà scaricato un file di configurazione xml che utilizzeremo per il deploy del nostro progetto. Dunque apriamo l'applicazione web in Visual Studio 2012 ed eseguiamo il Publish:

 

 

 

Se tutto è stato eseguito correttamente, alla fine del processo di publishing dovremmo vedere il sito funzionante:

 

 

Che dire, semplice e veloce!

 

Ok, ma quanto ci costerebbe tutto questo? Beh, se la nostra applicazione web fosse su uno spazio condiviso (come in questo esempio) non ci sarebbero costi perchè in ambiente condiviso è possibile eseguire fino a 10 siti web con un'occupazione massima di 1GB (questo fino a quando il servizio resterà in anteprima). Nel momento in cui ci fosse la necessità di scalare è possibile passare ad un ambiente riservato o condiviso a pagamento.

 

posted @ 22/11/2012 12:12 by Antonio "tdj" Catucci

Nuova versione 2012 del colorizzatore Copy Source To Html

Ho pensato di migliorare l’interfaccia del tool, passando il progetto da Windows Form a Windows Presentation Foundation Sorriso.

Ho anche implementato la versione inglese, per chi non ha italiano come lingua di interfaccia di sistema.

Invece delle ‘vecchie’ etichette, dei Tooltip indicano impostazioni e funzionalità.

Per le istruzioni illustrate, vi rimando al post precedente, in fondo al quale trovate il collegamento per scaricare il tool.

posted @ 13/11/2012 23:02 by Diego Cattaruzza

L'emulatore di Windows Phone 8, LocalHost, i servizi WCF

Diversamente da quanto avveniva per l'emulatore di Windows Phone 7.x, quello di Windows Phone 8 viene registrato all'interno del dominio Windows (banalmente anche la rete domestica) come dispositivo a sé stante.

Nel caso aveste delle app che, in fase di sviluppo e test, debbano accedere a risorse tipo il sito Web locale di IIS (il famoso LocalHost) o dei servizi WCF pubblicati su di esso, le cose non sono più come prima in conseguenza a questo cambio.

Detto in altre parole, mentre prima si raggiungeva LocalHost senza problemi, ora ci sono delle piccole riconfigurazioni da fare a seconda della tipologia di Host (IIS o IIS Express) e di progetto.

La documentazione MSDN ne parla in questa pagina che vi consiglio di leggere se non volete passare una giornata a capire come mai delle cose ovvie non funzionano

Alessandro

posted @ 11/11/2012 19:42 by Alessandro Del Sole

Capire l&rsquo;interfaccia di Windows 8

La prima volta che ho visto Windows 8 in beta devo ammettere di essere rimasto basito e spiazzato, ne ho parlato in un post ed ho subito un massacro, sul quale ho preferito non rispondere a tono per meri motivi di educazione. L'interfaccia, che allora si chiamava MetroUI, (adesso per motivi legali non si chiama più così) e che adesso, da quello che ho capito, si chiama "Stile di Windows 8" (correggetemi se sbaglio), ci ho capito veramente poco.

Le conclusioni a cui ero giunto erano clamorosamente sbagliate. Non ci avevo capito una mazza, mi si passi il termine. Probabilmente non avevo ancora usato abbastanza un tablet da capire, probabilmente quelli che all'epoca mi criticarono ne avevano capito molto meno di me, probabilmente mi avessero spiegato la vera novità dei live tiles avrei capito, probabilmente se i pubblicitari che il colosso di Redmond paga fior di quattrini invece di scimmiottare quelli della mela spiegassero quello che vendono... insomma, ripeto. Sono giunto ad una conclusione pesantemente errata, della quale mi scuso.

Faccio quindi un ragionamento basato sulle immagini.

La prima volta che mi sono trovato di fronte ad un'interfaccia metro mi sono ritrovato davanti ad un qualcosa del genere (foto copiata da WeTech)

A parte i colori, la pulizia dell’interfaccia, quali sono i reali vantaggi di un’interfaccia del genere rispetto all’interfaccia di un IPAD oppure di un Android?

Nessuna.

Quando invece ti ritrovi di fronte ad un’interfaccia così

e non guardi solo le figure per dire “ma quanto sono bravi quelli della Microsoft”, ma cerchi di capire, ti accorgi che mentre nell’Android o nell’IPAD con le icone richiami semplicemente delle applicazioni, in Windows 8 i live tiles, oltre a richiamare le applicazioni, ti permettono di avere dei feedback dalle applicazioni stesse. Ad esempio, nel jpg di sopra, vedo le mail, twitter, gli investimenti e quant’altro. Non c’è che dire. Anni luce avanti alla concorrenza, peccato che nessuno si sia preso la briga di spiegarmelo.

Alla luce di quanto capito, non mi rimane che dire: Ottimo lavoro.

posted @ 08/11/2012 01:31 by Davide Bertolino

Windows 8 &ndash; Le novit&agrave;

Windows 8, non solo Modern UI, ma anche:

  • Tempi di avvio e gestone della memoria migliorati
  • Supporto ISO, VHD e modalità di ripristino
  • Gestione live tiles e Il processo di stampa
  • Nuovo file system ReFS, CHKDSK e gestione sensori
  • Accelerazione grafica Hardware

Qui tutte le novità più importanti.

posted @ 04/11/2012 22:13 by Sergio Pappalardo

Rimuovere Office 2013 Preview ed installare la RTM

Per chi non se ne fosse accorto (molto probabile visti i lanci di Windows 8 e Windows Phone 8 che hanno dominato la scena) dal 25 ottobre è disponibile il download della versione RTM di Microsoft Office 2013 per tutti gli abbonati MSDN e TechNet.

Per chi avesse installato la versione Preview potrebbe riscontrare qualche problema durante la rimozione (sostanzialmente potrebbe fallire). Nel caso fate riferimento a questo documento: Uninstall Microsoft Office 2013 or Office 365

posted @ 02/11/2012 20:06 by Antonio "tdj" Catucci

Lanciato Team Foundation Service

In occasione della //Build/ Conference viene annunciato finalmente la fine della fase beta del servizio Team Foundation Service che diventa un servizio aperto a tutti.

TFS è, sostanzialmente, la piattaforma Team Foudation Server 2012 on the cloud che espone, dunque gli stessi servizi attraverso una intuitiva inrterfaccia web. Si può fare praticamente tutto, ovver Source Control, collaboration, supporto per la creazione delle storyboard con PowerPoint, integrazione con la piattaforma Feedback, Build e deploy direttamente su Windows Azure. Il tutto integrato con Visual Studio 2012.

La sorpresa più bella, però, è che è possibile utilizzare tutto questo gratuitamente per team fino a 5 utenti! Per team più grandi non sono stati ancora resi noti i prezzi quindi, fino ad allora (inizio del 2013) sarà possibile utilizzarlo gratuitamente.
Inoltre il servizio diventerà un benefit per tutti gli abbonati MSDN Test Professional o superiore.

Il mio consiglio è di registrarvi immediatamente su http://tfs.visualstudio.com :)
Se invece vi siete registrati durante la fase di preview, nessun problema perchè continuerete ad usufruire di tutti i servizi e manterrete la vostra url aggiornata con il nuovo dominio.

posted @ 02/11/2012 01:27 by Antonio "tdj" Catucci

OData Client Tools for Windows Phone Apps

Giorni fa vi avevo segnalato la disponibilità dei tool per l'aggiunta del supporto a OData nelle Windows 8 Store Apps.

E' stata rilasciata anche la controparte per Windows Phone, denominata OData Client Tools for Windows Phone Apps.

Grazie a questi tool, in un'app per Windows Phone aggiungere un riferimento a un servizio OData diventa banale attraverso la classica Add Service Reference. Appena ho un po' di tempo voglio mostrare come entrambe le piattaforme (Windows 8 e Windows Phone 8) possono così interagire con sorgenti dati esposte da applicazioni LightSwitch 2012.

Alessandro

posted @ 01/11/2012 22:33 by Alessandro Del Sole

Windows Phone 8: disponibili i tool di sviluppo

Nei giorni scorsi, alla conferenza Build 2012, Microsoft ha annunciato Windows Phone 8 e la disponibilità da fine mese dei primi device con il nuovo sistema operativo.

Contemporaneamente è stato rilasciato l'SDK, ossia l'insieme di strumenti di sviluppo, chiamato Windows Phone 8 SDK. Questo rilascio è importantissimo, perché non solo permette di sviluppare app per il nuovo sistema operativo, ma si integra con Visual Studio 2012 e consente sia lo sviluppo per questa versione, sia per quelle precedenti, evitando la necessità di ricorrere a Visual Studio 2010 per sviluppare per Phone 7.x.

Nota importante: l'SDK per Windows Phone 8 richiede Windows 8 e 4 GB di RAM. Quello della RAM non mi sembra poi così strano, qualunque pc di recente produzione ne ha anche di più. Il requisito di Windows 8 ha più che senso, dal momento che una delle novità fondamentali è che Windows Phone 8 si basa su una speciale versione del Windows Runtime (WinRT), che dà vita a Windows 8 stesso.

E' inclusa anche in questo caso un'edizione specifica dell'emulatore del device e una gratuita dell'ambiente di sviluppo, VS Express for Windows Phone 8.

Potete leggere tutte le novità di questa release nel nuovo articolo del mitico Matteo Pagani, mentre potete scaricare l'SDK da qui.

Fondamentale: fino al 7 novembre 2012 potrete sottoscrivere l'abbonamento annuale come sviluppatori individuali al Marketplace di Windows Phone per soli 8$ contro i normali 99! Da non perdere! Info qui.

Complimenti a Microsoft per questa nuova grande milestone. Con una buona spinta pubblicitaria.. se la può giocare.

Alessandro

posted @ 01/11/2012 22:27 by Alessandro Del Sole

Windows 8 presentato a New York

Finalmente esce Windows 8, la rivoluzione Microsoft. Ecco le immagini della presentazione a New York:

 

Alcuni commenti della stampa italiana:

A New York svelato il nuovo sistema operativo. Occhi puntati sul tablet Surface. Bill Gates: «Meraviglioso»

Windows 8, un ecosistema per Microsoft è una rivoluzione


Dal canto mio ci punto su! Appena raccolgo i soldi per un SSD sarà mio, è ora di pensionare il mio fido Vista Ultimate 64, che mi serve felicemente da più di 4 anni senza alcun problema. Largo ai giovani!

posted @ 29/10/2012 16:08 by Sergio Pappalardo

WCF Data Services Tools for Windows Store Apps

Forse sapete che nello sviluppo di Windows Store Apps per Windows 8, allo stato attuale è veramente difficoltoso referenziare e raggiungere i feed OData attraverso i WCF Data Services, se non attraverso richieste HTTP.

Cercando info al riguardo, ho casualmente scoperto che i primi di settembre Microsoft ha rilasciato un fondamentale Toolkit chiamato WCF Data Services Tools for Windows Store Apps che aggiunge funzionalità a Visual Studio 2012 grazie alle quali è possibile aggiungere le c.d. service references anche ai feed OData nelle app.

Download qui. In un futuro post vi farò vedere perché ritengo questa addition davvero importante.

Alessandro

posted @ 26/10/2012 02:19 by Alessandro Del Sole

Applicazioni con database: i backup

Prima di entrare nel vivo credo sia necessaria una precisazione: il termine cantinaro ha una derivazione più informatica di quella che credevo, come indica la Treccani. A quanti per propria cultura personale vogliono capire meglio l’etimologia del termine, possono trovare maggiori informazioni sul sito dell’enciclopedia stessa.

Come ho già risposto a mr. Antonio TDJ nel suo commento al mio post precedente, la questione di “a chi tocchi fare un backup” non ha una risposta. Molto dipende dai rapporti di affari che si intrattengono con i diversi attori con cui si collabora, ed anche dalla natura degli attori stessi. Il mio “target” sono PMI con un investimento informatico annuo che varia dai 1.000 ai 30.000. Si tratta quindi di aziende neanche troppo piccole in cui però posso avere o non avere una persona che gestisce la rete, o che vi lavora part time, oppure mi viene richiesto di essere io in prima persona ad occuparmi di tutto.

Mi preme far notare che in questi casi preferisco rinunciare a parte degli introiti subappaltando o collaborando con terzi competenti: ho chi mi gestisce le reti, ho chi mi segue la parte di hosting e soprattutto ho chi mi segue la parte hardware, ovvero chi vende, ripara e sostituisce i PC. Questo perché da un lato non ho una struttura adeguata per questo tipo di gestioni né posso caricarmi il magazzino di pezzi di ricambio o mettermi a tirare il CAT5, dall’altro la mia “mission” è quella di fare del software, non quella di gestire migliaia di cose diverse, e mentre vado avanti ed indietro, da già che ci sono, pulire anche il pavimento.

Una cosa che personalmente trovo odiosa riguarda il fatto che i programmatori, soprattutto i cantinari, hanno una notevole capacità di stupirsi e di compiacersi. Ad esempio si stupiscono e si compiacciono quando il programma che hanno scritto funziona. Per inciso, la cosa ha lo stesso senso di un chirurgo che si stupisce e si compiace ogni volta che un suo paziente non gli crepa sotto i ferri, o ancora di un operaio che si compiace e si stupisce che l’automobile appena prodotta funziona. Ogni tanto, parlando con colleghi programmatori, ho l’impressione che gli unici che non danno per certo il funzionamento di un programma sono quelli che li scrivono.

Dotare il programma di un sistema di backup dei dati, o meglio, di un sistema che permetta di caricare e scaricare i dati rappresenta una di quelle caratteristiche cogenti che pur essendo praticamente indispensabili, ne senti la mancanza solo quando ti servono. I clienti danno per scontato, visto che pagano, che il sistema che andiamo a vendere o produrre sia sufficientemente FAULT TOLERANT da supportare la terza guerra mondiale ed un’epidemia di ebola nello stesso tempo. Deve essere compito di chi intrattiene i rapporti commerciali con il cliente lo specificare (per iscritto, ovviamente) tutti quelli che sono i compiti dei vari attori, e che questi siano spiegati in maniera chiara, magari con doppia firma. Ed è compito del programmatore prevedere questo sistema. Il cantinaro non si pone il problema, tanto i dischi si inchiodano mica tutti i momenti, e poi è compito del cliente, tante scuse per non fare degnamente il proprio lavoro. Il programmatore serio si premunisce. Sempre.

Oltre a prevenire disastri al cliente, cosa per la quale nessuno ringrazierà mai (perché la robustezza viene data per scontata, lo ripeto di nuovo), l’avere un sistema di gestione dei backup è una comodità anche nei confronti del programmatore, soprattutto in due momenti.

  • Nell’installazione: mi evito di installarmi un management per il motore in questione, di dovermi creare degli script e poi eseguirli.
  • Nella risoluzione di eventuali errori: mi riproduco sul pc di lavoro esattamente la stessa situazione che ho in remoto.

Che poi la gestione dei backup possa, anzi debba essere demandata al cliente o ad un suo incaricato è pacifico. Anzi, certi tecnici di rete si arrabbiano se gli porti via il lavoro, quindi guai a non lasciagli fare le cose a modo loro. Quello che mi preoccupa, che sia chiaro, non è quando c’è un’organizzazione strutturata in cui ognuno fa il suo compito e tutte le persone sono competenti (il che mi capita veramente di rado, ma questo è un altro problema). Il problema è quando hai a che fare con persone che si credono competenti, oppure quando non si sa bene chi debba fare che cosa. Le cose vanno sempre e comunque quantomeno preventivate e discusse. Personalmente adatto le soluzioni al caso specifico, per cui ho massima flessibilità. L’unica cosa chiara è che se i backup non vengono effettuati a tempo ed ora io BLOCCO TUTTO.

Capito il perché, vediamo di analizzare il come. E qui cominciano le differenze sostanziali perché il come dipende fortemente da quello che è il motore sul quale lavoriamo, e qui ragioniamo diversamente a seconda che il motore sia File Based oppure meno.

Nel caso il motore sia File Based, ovvero basato su file, e quindi, per chi non l’avesse capito, stiamo parlando di programmi che usano Access, SQL Compact, SQLite, VistaDB o quant’altro, un backup e/o un restore può essere fatto in maniera molto semplice copiando una serie di file.

Nel caso invece il motore sia un motore vero, invece, in qualche maniera allora è previsto un sistema di backup e restore. Ad esempio, in SQLServer è possibile fare un backup di un database con un semplice comando chiamato, ad esempio, dal management.

Backup Database NomeDB to Disk='NomeFileBackup.bak'

Se si usa una versione di SQLServer superiore alla express, allora sarà possibile schedulare il JOB di backup, in maniera semplice. Se invece si usa proprio quella? Si può prendere spunto da una soluzione “precotta”, magari adattandola alle proprie esigenze (io consiglio di studiarsi questa soluzione scritta da Danilo Corallo).

Concepito così il sistema non è difficile da realizzare (e questo è un bene), e con certe premesse funziona (e questo è un molto bene), ma implica il pensare ad alcuni problemi (male) ed ha anche grossi limiti (molto male).

Vediamo di analizzare i problemi ed i limiti.

Il problema principale è quello che con molti motori (sia file based che engine based) il database può essere “backuppato” solo se non ci sono connessioni attive. Quindi bisogna indagare se ci sono connessioni attive, bloccare l’accesso al database durante le operazioni di backup, fare le operazioni necessarie, quindi liberare il tutto. Sui motori file based è raccomandato, prima di effettuare il backup, di eseguire una compattazione del database stesso, così da spurgare quest’ultimo delle righe cancellate (che richiede tempo, e quindi ulteriore tempo di fermo per manutenzione del programma stesso). Ora, se il programma è monoutente questo può non essere un problema, diverso invece quando gli utenti sono più di uno.

Un ulteriore problema è rappresentato dal fatto che se ti “parte” una tabella o il database, allora non è detto che quanto ti salvi sia una copia questa possa poi essere ripristinata senza problemi.  Mica da ridere.

Credo che ognuno, quando pensa al problema, se la canti e se la suoni un po’ come vuole, tamponando il problema ognuno alla sua maniera, in mille modi diversi. Per quanto uno ci pensi l’affidabilità del sistema è garantita al 99,9%, che è meglio di niente, ma è ben lontana dal 100%.

Il limite più grande di un sistema del genere è che presuppone di avere tutti i diritti e tutti gli accessi sull’eventuale server (questo vale soprattutto per i database engine based, magari piazzati su server remoto ovvero ad esempio su server web), cosa che con molti host non è assolutamente vera. Provare per credere. Io l’ho scoperto a mie spese adesso che devo trasferire un DB da un server ad un altro (a proposito, grazie Stefano per la tua disponibilità e pazienza).

Un altro limite (per me) è nel fatto che in un sistema del genere si finisce per backuppare tutto il database, comprese tabelle magari grosse e che non vengono aggiornate tutti i momenti o magari non vengono aggiornate mai, o ancora tabelle che vengono aggiornate periodicamente ma non dagli utenti stessi.

Tanto per essere chiari, si pensi alle tabelle dei comuni, delle regioni e delle provincie, oppure alle tabelle degli ABI e CAB come quelle pubblicate dall’ottimo Bastianello su questi schermi.

Il mio metodi alternativo.

Dopo questo mega-pistolozzo introduttivo alquanto noioso, mi permetto di suggerire un metodo alternativo che consente di eseguire backup e restore anche parziali, richiede solo un qualsiasi accesso al database (ovvero senza particolari permessi), è adattabile “virtualmente” ad ogni tipo di database anche file based, e non richiede nessun permesso sulla macchina server. Inoltre, se analizzato in sede di creazione delle tabelle stesse, può essere adattato anche a backup parziali sulla singola tabella. Infine normalmente non bisogna bloccare l’accesso al database stesso. I difetti sono di una inefficienza sostanziale (traduzione: è sicuramente molto più lento di un Backup Database) e nella quantità di dati che viaggiano sulla rete stessa, che è decisamente più grande che in caso di backup. Chiaramente la soluzione è perfettibile, ha i suoi drawback, alcuni dei quali sono chiaramente evidenziati, e sicuramente molti ci hanno pensato prima di me ed hanno realizzato una soluzione migliore.

Alla noia, ripeto che quanto segue è UNA soluzione possibile, quella che io nella mia becera ignoranza adotto per la MIA comodità nelle MIE applicazioni. Ognuno credo che debba ragionare e scegliere quella che per le proprie esigenze ritiene più opportuna.

Detto questo, il tutto si risolve in maniera banale facendo queste semplici operazioni:

  1. Leggi dal Database l’elenco delle tabelle.
  2. Per ogni tabella guarda se devi esportare o meno dei dati
  3. Se devi esportare dei dati, carica la tabella in memoria e poi salva i dati in un file XML

Difficile? 50 righe di codice (scritte maluccio, a dire la verità) per la versione “interattiva”, ovvero una form che ti richiede quali tabelle vuoi salvare, quantità simile di codice per la versione “schedulata”, senza interfaccia utente, che fa l’operazione inversa.

Imports System.Data.Sql
Imports System.Data.SqlClient
Public Class frmEsportazioneDatiTabelle

    Private Sub frmEsportazioneDatiTabelle_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim Conn As New SqlConnection(My.Application.CSB)
        Dim CMDNomiTabelle As SqlCommand
        Dim CMDRecordTabelle As SqlCommand
        Dim NomeTabella As String
        Dim RecordTabelle As Nullable(Of Integer)
        Dim RigaTabelle As dsTabelle.tbTabelleRow
        Try
            Conn.Open()
            'Mi trovo le tabelle
            CMDNomiTabelle = New SqlCommand("select * from INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'BASE TABLE'", Conn)
            Using reader As SqlDataReader = CMDNomiTabelle.ExecuteReader
                While reader.Read
                    NomeTabella = reader("TABLE_NAME").ToString
                    Me.DsTabelle.tbTabelle.AddtbTabelleRow(NomeTabella, True, 0, False, 0)
                End While
            End Using
            'Mi trovo quanti record per ogni tabella
            For Each RigaTabelle In Me.DsTabelle.tbTabelle
                CMDRecordTabelle = New SqlCommand("select count(*) from [" & RigaTabelle.NOME & "]", Conn)
                RecordTabelle = CMDRecordTabelle.ExecuteScalar()
                If RecordTabelle.HasValue Then
                    RigaTabelle.Righe = RecordTabelle.Value
                End If
            Next
            Conn.Close()
        Catch ex As Exception

        End Try
    End Sub

    Private Sub btnEsporta_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEsporta.Click
        Dim RigaTabelle As dsTabelle.tbTabelleRow
        Using connection As New SqlConnection(My.Application.CSB)
            For Each RigaTabelle In Me.DsTabelle.tbTabelle
                If RigaTabelle.Check = True Then
                    Dim Adapter As New SqlDataAdapter()
                    Dim DataSet As New DataSet
                    Adapter.SelectCommand = New SqlCommand("select * from [" & RigaTabelle.NOME & "]", connection)
                    Adapter.Fill(DataSet)
                    DataSet.WriteXml(My.MyApplication.PATH & RigaTabelle.NOME & ".xml", XmlWriteMode.WriteSchema)
                End If
            Next
        End Using
        MsgBox("Esportazione dati completata correttamente")
    End Sub
End Class

Per i più pigri sto preparando un programma già pronto che distribuirò in sorgente (e che comprende anche il restore, nonchè il backup della struttura del database, che qui non viene salvata.) Come già detto in questi mesi sono mio malgrado limitato da alcuni problemi “di cuore”, per cui ci vuole ancora un attimo di pazienza. La mia speranza è comunque non tanto di fornire soluzioni già pronte, quanto piuttosto spunti di riflessione. Alla prossima.

posted @ 22/10/2012 14:58 by Davide Bertolino

Slide e Demo dell'evento "Visual Studio 2012 Tour"

Da qualche giorno è disponibile tutto il materiale mostrato all'evento "Visual Studio 2012 Tour" che abbiamo tenuto a Reggio Emilia lo scorso 6 ottobre.

Relativamente alla mia sessione su Entity Framework 5 troverete sia le slide che la demo. Dato che questa volta mi sono limitato molto con le slide per dare maggiore spazio alla demo, sul sito potete leggervi un articolo che riepiloga brevemente le novità introdotte con EF5.

Ma oltre a quest'ultimo articolo ne trovate altri. Eccovi l'elenco:

 

  1. Le novità di Entity Framework 5
  2. Entity Framework Code First Migrations
  3. Entity Framework Code First


 Mentre qui trovate un elenco più esaustivo di argomenti su EF: Argomenti su Entity Framework

 

posted @ 15/10/2012 17:21 by Antonio "tdj" Catucci

Tag: &quot;IO C'ERO&quot; all'evento di Reggio Emilia

Sulla pagina Facebook di Visual Basic Tips & Tricks sono state caricate le foto relative all'evento tecnico "Visual Studio 2012 Tour", tenutosi sabato 6 ottobre scorso al Centro Simonazzi di Reggio Emilia  e all'evento conviviale consumatosi alla pizzeria Nuova Piedigrotta 2.

Chi vuole 'marcare' che c'era, si cerchi nelle foto e si 'tagghi'. :)

posted @ 15/10/2012 16:58 by Diego Cattaruzza

Applicazioni con database: uscire dalla logica del cantinaro.

La parola cantinaro non l’ho inventata io. L’ho sentita per la prima volta molto tempo fa, sicuramente quando l’anno iniziava ancora con 199 dal mio allora professore di Teoria dei Circuiti Elettronici al Politecnico di Torino, che mi descriveva l’approccio tipico dell’elettronico home made che assembla il suo circuito in cantina, una specie di scienziato pazzo che ogni tanto ne imbrocca qualcuna, che fa cose che funzionano più o meno e che ogni tanto combina qualche disastro.

La stessa logica può essere applicata anche alla programmazione, e dalle domande che leggo sui forum che frequento c’è ben poco da stare allegri.

La cosa che mi lascia maggiormente interdetto è pensare come stia diventando sempre più alla portata di tutti lo sviluppo di applicazioni di media complessità, che può anche essere un bene, grazie ai nuovi strumenti che di anno in anno si affacciano sul mercato, ma che diventa un male per i poveri clienti in molti di quei casi in cui le cose non funzionano, o smettono di funzionare, o ancora peggio, quando con il passare del tempo si deve fare manutenzione. Il rischio è quantomeno quello di fare una figuraccia, o, in casi peggiori, di essere coinvolti in cause civili risarcitorie. Alcune delle “good practice” che descriverò servono a proteggere il povero programmatore da questi inconvenienti, non ultimo l’impreparazione dei clienti stessi. Leggo dappertutto ogni sorta di spiegazione di metodi nuovi per programmare, delle grandiose ultime novità, dei nuovi strumenti che rivoluzioneranno il modo di programmare, e pochissime spiegazioni su come sopravvivere ai propri programmi ed ai propri disastri, quasi fossero segreti per iniziati.

Sarò degno di colmare questa lacuna? Quantomeno ci provo.

Quanto di seguito valga non come regola aurea ma come spunto di riflessione, così come le soluzioni proposte valgano come “una delle infinite possibili”, e non come BEST PRACTICE assolute. E non si prenda quanto scritto come necessario, anche se di fatto lo è. Le applicazioni possono funzionare benissimo anche senza le mie fisime. Si tratta solo di vedere come e cosa succede quando bisogna rimediare ai problemi.

  1. Gestire il backup dei dati

    Qualsiasi cosa succeda si deve garantire che, anche in caso di danno fisico alla macchina, il programma possa ripartire nel minor tempo possibile e perdendo meno dati possibile. La cosa è ovvia, o almeno si spera. Credo che ognuno sia libero di gestirlo come più gli piace. Il sistemista tipicamente sfrutta le utilities del motore, il programmatore si farà la sa bella utility esterna o la integrerà nel programma.  Nella mia becera ignoranza io utilizzo un sistema esterno proprietario, scritto scopiazzando un po’ di qua ed un po’ di la. Esterno per due motivi.

    Il primo è che la utility viene copiata su una macchina e schedulata, ma anche eseguita stand-alone soprattutto per i ripristini o per i backup parziali.

    Il secondo è che con quattro dati di configurazione in croce si riesce ad avere un mattoncino fatto e finito pronto per ogni applicazione, compresi eventuali cambi di database.

    Una domanda sciocca che qualcuno potrebbe fare è: dove li salvo questi backup? La risposta è: metteteveli un po’ dove volete. Su una chiavetta, sulla rete, fate un upload su un sito ftp, su una cartella Dropbox… Sicuramente non sono da lasciare sul pc o sul server in questione. La mia applicazione di gestione backup può fare tutto questo.

    Una domanda ancora più sciocca è: ogni quanto vanno fatti i backup? Qui la risposta non esiste perché dipende da quanti dati vengono modificati/aggiunti/cancellati nell’unità di tempo. Un backup al giorno può essere troppo se uso il programma una volta alla settimana, oppure poco se aggiungo 1000 ordini al giorno. Come detto dipende e deve essere valutato.

    Quello che è necessario garantire è che i backup vengano effettivamente fatti. Se ad esempio si fa fare il backup all’utente perché questi vuole salvare i dati su chiavetta, ci si deve assicurare che questi provveda a farli. Eventualmente passato un certo tempo dall’ultimo backup registrato, si deve impedire l’accesso al programma fino al nuovo backup.

    Nasce quindi la necessità di avere uno storico da qualche parte. Per non stare a reinventare niente, io personalmente uso una tabella apposita nel database. Ciascuno è libero di fare quello che crede.

    Vale la pena di ricordare che garantire un metodo di backup dei dati è anche un obbligo di legge.

  2. Gestire una regolare manutenzione dei dati

    La fiera dell’ovvio. Se si fanno regolari manutenzioni (leggasi package)  si hanno buone probabilità di mantenere un accesso ai dati veloce. Pigramente uno potrebbe pensare di fare un backup e poi fare il package. Io personalmente tengo le due cose separate così da poterle gestire indipendentemente. Anche qui tengo traccia dei package effettuati (almeno degli ultimi) in una seconda tabella apposita sempre nel database.

  3. Log Log Log fortissimamente Log

    Ho imparato a mie spese come un sistema di log sia praticamente indispensabile quando ho avuto dei malfunzionamenti sporadici e da allora qualsiasi applicazione scriva in una maniera o nell’altra ci metto una gestione dei log, anche nelle applicazioni embedded. E’ una buona pratica, esistono n-mila librerie già fatte, non esistono giustificazioni plausibili per non loggare. Cosa buona e giusta sarebbe riuscire a loggare un applicativo in remoto. Cosa grandiosa sarebbe un sistema di gestione di log/trace che comunichi con un server eventuali problemi, lasciandoci in automatico informazioni sugli errori che si verificano nelle nostre applicazioni. Si può vivere anche senza log. Quanti lo fanno? Per quello che costa implementarlo e per i problemi che risolve io non posso più farne a meno.

  4. Gestione dell’apertura e della chiusura del programma, con annessi e connessi

    Di che cosa sto parlando? Iniziamo dalla chiusura, intesa come chiusura imprevista per una eccezione non gestita. Nessuno scrive applicativi perfetti che non si inchiodano mai, tanto più se questi sono di una certa complessità. Personalmente, presso clienti, ho statisticamente meno un errore al mese su più di un migliaio di installazioni. Niente male ma si può e si deve fare meglio. Detto questo, una cosa insopportabile, e che mi fa pensare che chi ha scritto un certo programma non sappia fare il suo lavoro, è la classica schermata di errore che viene generata di difetto da un applicativo. Il lettore è padronissimo di pensarla come vuole ma una gestione degli errori approssimativa o, peggio, nessuna gestione degli errori, oltre ad essere un pessimo biglietto biglietto da visita, è anche deleterio nei confronti del programmatore stesso che tali errori deve risolvere. Per la gestione delle eccezioni è ad esempio utile sbobinarsi lo stack-trace e salvarlo in un file di testo o come attachment ad una mail. Su come fare il buon Diego ha abbondantemente dissertato nei suoi ottimi articoli. Ubi maior tricche tracche, leggete e ispiratevi.

    Oltre a questo ritengo sia praticamente indispensabile, sempre se piace la vita serena, il garantirsi un minimo di  traccia dei comportamenti precedenti del programma. Mettiamo che il programma sia andato in eccezione mentre si fa la conversione da bolle a fatture. Sarebbe interessante avere una segnalazione del fatto che tale conversione può essere andata o meno in cacca, per cui lo stato del DB può non essere quello che ci si aspetta.

    Ancora una volta poi un analisi in sede del log degli accessi può ad esempio evidenziare malfunzionamenti mirati ad esempio ad una determinata macchina o ad una determinata funzione. Si tratta di funzionalità poco “visibili” ma molto utili quando le cose non vanno.

    Come fare? Oltre al log, è sufficiente una semplice tabella sul DB che memorizzi gli accessi di ogni utente, segnandosi l'ora di accesso, l'ora di uscita, ed uno stato di connessione aperta. Al prossimo accesso al programma basterà andare a vedere se la sessione precedente per quell'utente è terminata correttamente e, in caso contrario, vedere se e come si riesce a rimediare i danni.

  5. Gestione della sicurezza

    Non tutti gli utenti devono poter fare tutto sul programma. Visto che c'è un LOG degli accessi, esisterà ovviamente una tabella degli utenti stessi, con annesso elenco delle password, opportunamente criptate. A questo punto con poco(!) lavoro è possibile gestire la sicurezza lasciando a certe persone certi permessi, a certe altre permessi diversi e così via. Faccio notare che se si trattano dei dati personali, esiste l'obbligo di legge di proteggere l'accesso mediante password, per cui si tratta di una semplice(!) estensione.

  6. Gestione degli aggiornamenti

    Se qualcuno riesce a scrivere delle applicazioni che rimangono uguali a se stesse allora mi spieghi come fa perché io non ci riesco proprio . A programma stabile uno o due aggiornamenti l'anno sono ragionevoli. Vuoi per le nuove esigenze che si presentano, vuoi perché ci sono degli errori da correggere, vuoi perché con qualche aggiornamento del sistema operativo o qualche service pack ti si schianta tutto, vuoi anche per qualche banale errore di programmazione, allora il programma dovrà essere aggiornato, e questo è pacifico.

    Pensare a priori ad un sistema che consenta gli aggiornamenti significa avere una modo per uscirne vivi. Non è detto che il sistema debba forzatamente essere perfetto, ma deve essere funzionale. Attenzione a non pensare che l'aggiornamento riguardi il solo programma. Va gestito anche l'eventuale aggiornamento del database stesso, quindi bisogna quantomeno avere uno storico delle modifiche del database (memorizzate in una tabella apposita, con tanto di data dell’aggiornamento). Volendo è anche utile un elenco degli script eseguiti sul database stesso. A livello di ecosistema è necessario avere un componente che esegua gli script sul database, magari in automatico, o comunque senza l’intervento dell’utente.

    Quindi è necessario avere un sistema di gestione delle versioni, ad un salvataggio dei sorgenti, ad un sistema che distribuisca eventuali aggiornamenti del programma e ad un terzo che aggiorni al bisogno il database. Ognuno può farlo come crede, anche gestire il tutto a manina santa. L'importante è che lo faccia in maniera consapevole, e non ritrovandosi con soluzioni arraffazzonate. La mia notevole pigrizia, unita al fatto che i miei numeri sono consistenti, hanno fatto si che per uscirne vivo pensassi e realizzassi un sistema praticamente automatico per gestire il tutto.

    Vale la pena di ricordare che non è igienico distribuire aggiornamenti senza averli prima ben provati in sede numerose volte e su più situazioni di dati. Mai provare direttamente dai clienti, e comunque sempre BACKUP.

Questo è solo un elenco MOLTO parziale delle cose realmente importanti. Ce ne sono altre n-mila altrettanto importanti. Se il tempo e la salute me lo permetteranno poco per volta vedrò di illustrare come io ho risolto, per quelle che sono le mie esigenze, i problemi di cui sopra.

A (spero) presto.

posted @ 12/10/2012 17:17 by Davide Bertolino

LightSwitch: animazione di testo

Come sapete, in LightSwitch 2012 è possibile aggiungere delle caselle di testo descrittive, non collegate ai dati, cosa non possibile nella versione precedente se non attraverso dei trucchetti.

Sostanzialmente si fa questo, in uno screen si seleziona l'aggiunta di testo:

Dopodiché. si specifica il testo da mostrare:

Ora questa casella di testo viene visualizzata, per default, come testo normale e nelle Proprietà è possibile definire anche modi diversi di presentarla, es. formattazione Warning, Nota, ecc.

Dietro le scene tale casella di testo è un controllo TextBlock di Silverlight, per cui è anche possibile creare delle simpatiche animazioni che possano rendere il testo più carino soprattutto in uno screen di benvenuto.

Si crea quindi un'animazione da codice, attraverso un oggetto Storyboard e una ColorAnimation da applicare alla proprietà Foreground, il tutto dopo aver ottenuto l'istanza del controllo. Tradotto in codice:

        Private Sub Search_Created()

            ' Find the control

            Dim newsText = Me.FindControl("TextNews")

 

            AddHandler newsText.ControlAvailable, Sub(sender, e)

                                                      'Get the istance

                                                      Dim block = CType(e.Control, TextBlock)

                                                      'Set a different color, if you like

                                                      block.Foreground = New SolidColorBrush(Colors.Blue)

 

                                                      'Create an animation

                                                      Dim sb As New Storyboard

                                                      Dim colorAnim As New ColorAnimation

                                                      colorAnim = New ColorAnimation()

                                                      colorAnim.AutoReverse = True

                                                      colorAnim.RepeatBehavior = RepeatBehavior.Forever

                                                      colorAnim.From = Colors.Blue

                                                      colorAnim.To = Colors.Orange

                                                      colorAnim.Duration = TimeSpan.FromSeconds(1)

 

                                                      'Apply the animation

                                                      Storyboard.SetTarget(colorAnim, block.Foreground)

                                                      Storyboard.SetTargetProperty(colorAnim, New PropertyPath("Color"))

                                                      sb.Children.Add(colorAnim)

                                                      sb.Begin()

                                                  End Sub

 

        End Sub

Ovviamente potete modificare le proprietà dell'animazione come volete, quindi colori diversi e durata diversa. Quando aprirete lo screen che contiene la sopra citata casella di testo, la vedrete animata. Carino

Alessandro

posted @ 12/10/2012 16:49 by Alessandro Del Sole

LightSwitch: mini-guida per l'upgrade di applicazioni dalla v1 alla v2

In questi giorni ho completato la migrazione di un progetto piuttosto consistente in LightSwitch, dalla v1 (2011) alla v2 (2012) per cui volevo condividere qualche dritta che può tornare utile prima di fare il passo (e affinché il passo non sia più lungo della gamba )

In realtà il procedimento in sé è semplicissimo, ma bisogna tenere conto dei seguenti aspetti.

Estensioni e componenti di terze parti

Se la vostra applicazione fa uso di estensioni o controlli utente di produttori di terze parti, è fondamentale accertarsi che esista una versione supportata anche in Visual Studio 2012. Nella maggior parte dei casi le estensioni per la v1 vengono correttamente riconosciute e utilizzate anche nella v2, ma non sempre è così. Di conseguenza, prima di fare qualunque cosa, create un progetto LightSwitch vuoto in VS 2012 e verificate nella scheda Extensions delle proprietà che ciò che usate sia disponibile. In caso contrario, verificate la disponibilità di una nuova versione dell'estensione o controllo. Se non c'è, fate il repair dell'installazione dei controlli in modo che siano riconoscibili da Visual Studio 2012, se questo è stato installato dopo le menzionate estensioni.

Lato server: i prerequisiti

Se la vostra applicazione viene pubblicata su un server Web, come spesso succede, dovete installare .NET Framework 4.5 e il tool Web Deployment 3.0. I prerequisiti per Visual Studio LightSwitch 2011 valgono anche per la 2012, quindi non dovrete far altro. Un suggerimento: per il Web Deployment 3.0 vi consiglio di installarlo tramite la Web Platform Installer che fa le cose fatte per bene.

Lato server: il database

A meno che non vogliate fare l'upgrade a SQL Server 2012, il vostro database esistente non avrà bisogno di essere toccato. Gran bella cosa.

Lato client: Silverlight 5

Per forza di cose LightSwitch 2012 si basa su Silverlight 5, di conseguenza i client che si connetteranno alla vostra applicazione riceveranno un avviso per il quale è necessario scaricare e installare la versione aggiornata del plug-in. In scenari come il mio, quindi un dominio Windows con utenti a privilegi limitati, è una cosa di cui tenere conto perché se volete evitare di (o se non potete da remoto) fare il giro di tutte le postazioni con la password admin per installarlo, può essere buona cosa prevedere un sistema di distribuzione del plugin tramite aggiornamenti di sistema (es. server WSUS).

Progetti Silverlight contenenti custom controls

Se in LightSwitch 2012 aprite una solution contenente un progetto Silverlight che espone custom controls, per il discorso del targeting questo non verrà aggiornato automaticamente alla versione 5. Di conseguenza, dovrete aggiornare il progetto alla versione 5 passando dalle proprietà, ma cosa ancor più importante è aggiornare i riferimenti ad assembly per i quali esista una versione per Silverlight 5. Ergo, se non l'avete, non migrate: eviterete dei problemi, anche perché il progetto LightSwitch ha come target la nuova versione.

La pubblicazione

Il wizard di pubblicazione su server Web include ora qualche opzione in più, ma non dovete usarle per forza, per cui non dovrete toccare nulla delle precedenti impostazioni e potrete andare avanti a pubblicare esattamente come con la versione precedente. Decisamente bello  Permettetemi però un consiglio, visto che mi è capitato personalmente: se fate uso di estensioni e librerie di terze parti, dopo che avete fatto l'upgrade di queste ultime e prima della pubblicazione sul server, andate nella cartella sul server che contiene l'attuale pubblicazione e rimuovete la cartella Bin. Dopodiché, rifate il deploy. Per quanto LightSwitch sia attento, può sfuggirgli di sostituire qualche assembly con le versioni aggiornate (che nel progetto sono usate correttamente). Ovviamente fatevi un bel backup della cartella Bin, non si sa mai.

Questi sono i punti (di massima) critici nell'upgrade di un'applicazione LightSwitch dalla v1 alla v2. Mi raccomando: Visual Studio 2012 convertirà il file .LsProj, cosa non reversibile. Si, ok, fa anche un backup.. ma fatevelo anche voi dell'ultima versione funzionante alla v1.

Buona migrazione!

Alessandro

posted @ 10/10/2012 18:03 by Alessandro Del Sole

Visual Studio 2012 Update 1 CTP 3

Si, in termini di sigle è sempre abbastanza complesso, in ogni caso è stato rilasciato (in CTP - community technology preview) un primo aggiornamento a Visual Studio 2012 che apporta interessanti miglioramenti, di cui alcuni specifici per la gestione del ciclo di vita del software, quindi Team Foundation Server e Test Manager, altri di interesse più generale come ad esempio la possibilità di creare applicazioni in compatibilità per Windows XP.

L'elenco completo delle novità si trova a questo indirizzo. Il download, invece, è disponibile qui.

Non si sa con precisione, invece, la data di rilascio per l'aggiornamento definitivo.

Alessandro

posted @ 09/10/2012 23:05 by Alessandro Del Sole

Com'è andato l'evento Visual Studio 2012 Tour

Sabato scorso, il 6 ottobre, si è tenuto a Reggio Emilia l'evento Visual Studio 2012 Tour che la nostra community VB T&T ha organizzato per festeggiare il lancio di Visual Studio 2012.

Personalmente sono molto contento di com'è andata, sia perché eravamo circa 40 e in un sabato, in una zona normalmente fuori dall'area lombarda in cui siamo più presenti, solo i migliori partecipano , sia perché ho visto un pubblico molto attento e partecipe, quello delle grandi occasioni insomma.

Credo che le sessioni siano state abbastanza interessanti, (Antonio ha spaccato con Entity Framework 5 confermandosi speaker di grande livello) e la mia sui charm di Windows 8 ha destato curiosità soprattutto sul funzionamento del sistema operativo e dello Store.

Ci siamo persi per strada Renato, che per problemi familiari non ha potuto tenere la sessione su Async/Await, che però ho fatto io riproponendola nella stessa chiave che avevo già proposto un paio di settimane fa al Visual Studio 2012 Day con i ragazzi di DotNetLombardia.

Sempre i migliori (tra cui gli amici Alessandro Scardova e Igor Antonacci di DotDotNet), si sono poi fermati dopo l'evento per un buon pranzo in compagnia, che poi costituisce la parte più importante di ogni evento

Un paio di foto:

Un caloroso ringraziamento agli intervenuti e un invito a tenere d'occhio il sito perché il materiale delle sessioni sta per essere pubblicato.

Alessandro

posted @ 09/10/2012 22:59 by Alessandro Del Sole

Bing Maps SDK for Windows 8 Store apps

E' disponibile in versione definitiva l'SDK di Bing Maps per le Windows 8 Store apps, cosicché diventa finalmente possibile integrare le mappe di Bing nelle nostre app per il nuovo OS di casa Microsoft.

In sostanza, ci sono degli appositi controlli utente, per i quali (come in altri contesti) è necessario ottenere una key. Per gli sviluppatori .NET, poi, ci sono alcune procedure da mettere in atto e che sono elencate nella documentazione.

Ovviamente, sono richiesti Windows 8 RTM e Visual Studio 2012 RTM.

Buon divertimento, queste sono mappe che funzionano, non come "quelle altre" 

Alessandro

posted @ 04/10/2012 02:09 by Alessandro Del Sole

EF5 all'evento "Visual Studio 2012 Tour"

Quale occasione migliore per tagliare il traguardo dei 300 post? :)
Sabato 6 ottobre 2012, ci sarò anche io tra gli speaker dell'evento "Visual Studio 2012 Tour" che abbiamo organizzato in occasione del lancio di Visual Studio 2012.

La mia sessione (tanto per cambiare) sarà focalizzata su Entity Framework 5 e cercherò di farvi vedere un po' le varie novità introdotte, in particolare Code First, Code Migrations, supporto enumeration, ecc...

Per l'agenda completa e le istruzioni per registrarsi le trovate qui: Evento Visual Studio 2012 Tour

Vi aspetto!

posted @ 01/10/2012 19:03 by Antonio "tdj" Catucci

Versione 2012 del colorizzatore Copy Source As Html

Era dall’agosto del 2008 che non mettevo mano al mio colorizzatore (vedi mio post “Versione Express del colorizzatore cdCopySourceAsHtml”, nel quale sono spiegate alcune cose che non trovate qui).

Per la versione 2010, era sufficiente modificare un’inezia nel risultato, per cui la pigrizia mi ha fatto sempre rimandare l’implementazione della versione di upgrade.Occhiolino

Con la versione 2012, invece, le differenze sono anche maggiori. Con la lingua fuori

Per di più, con la messa on line del nostro nuovo sito, si è verificata l’insufficienza dell’editor della Telerik da noi usato (specificamente riguardo alla codificazione del codice).Perplesso

Così, ho apprestato una nuova versione, valida per tutte le versioni Express (ma non solo). Ho preferito sviluppare solo la versione Express, poiché farne un Addin per le versioni professionali è quasi superfluo, dato che si possono usare altri strumenti altrettanto professionali.Occhiolino

Nota dd. 13/11/2012: dopo qualche tempo, ho pensato di rendere l’interfaccia del tool un pochino più moderna e carina e di implementare anche la localizzazione inglese.
Nel seguito, illustrerò come va usata (è decisamente facile, ma con le immagini è ancora più facile Sorriso).
Nota dd. 13/11/2012: in corsivo, le modifiche.

Prima, riporto la sequenza già indicata nei post precedenti, con qualche modifica:

  1. Si seleziona il codice da tradurre
  2. Lo si copia in memoria (CTRL-C)
  3. Si lancia “Copy Source To Html”
  4. Si controlla che le impostazioni siano quelle volute
  5. Si fa clic sul pulsante
  6. Si incolla la traduzione nella sorgente del documento html che si sta redigendo

Illustrata con immagini, ecco la sequenza con del codice di esempio, su un messaggio in uno dei nostri forum:

  • Si seleziona il codice da tradurre 
    Lo si copia in memoria
csth1
  • Si lancia “Copy Source To Html”
  • Si controlla che le impostazioni siano quelle volute
    Passando il mouse sui pulsanti, un tooltip indica l’attuale impostazione e cosa si imposta se si clicca. Le impostazioni vengono salvate e riprese al successivo avvio.
  • Si fa clic sul pulsante con le due frecce.

Nello scrivere il messaggio, conviene lasciare sempre una riga alla fine (basta andare a capo)

csth2

Poi si clicca su csth3
Si posiziona il cursore prima dell’ultimo paragrafo csth4

Si incolla

csth5 

Si clicca su csth6

E si ammira il risultato:Sorriso

csth7

Raramente (ma purtroppo succedeTriste) accade che anche il codice prodotto da Copy Source As Html venga stravolto in qualche particolare dall’operazione di parsing dell’editor – che Telerik sta aggiornando, ma nel complesso il risultato è più che soddisfacente.

E per VB6? L’editor di VB6 non espone il formato RTF del testo del codice, quindi il colorizzatore – che lo interpreta e traduce – non è efficace. Però potete, se avete una versione .Net Express o professionale, incollare prima il codice VB6 in VB Express e da lì fare come sopra. Ma, diciamocelo tra noi: che ci fate ancora con VB6?Sorriso

Naturalmente, è possibile usare il colorizzatore per qualsiasi codice esposto in Visual Studio (xml, xaml, vb, c#…) e potete usarne i risultati su qualunque editor web che fornisca la possibilità di modificare la sorgente html di ciò che si sta scrivendo (non solo quello del nostro sito, per intenderci).

Copy Source As Html è scaricabile da questo collegamento.

posted @ 26/09/2012 13:20 by Diego Cattaruzza

Evento: Sviluppare Giochi per Windows 8

Sviluppare Giochi per Windows 8

Partecipa anche tu al primo evento dedicato completamente alla creazione di giochi per il nuovo sistema operativo Windows 8. Non perdere l’occasione di essere tra i primi a creare un gioco di successo per il sistema operativo del futuro, durante l’evento potrai scoprire tanti consigli utili, linee guida da seguire, esempi concreti e le ultime novità.

L'evento, organizzato da Microsoft Italia, si terrà il 5 ottobre presso la sede di Peschiera Borromeo (MI). L'agenda e il link per la registrazione sono disponibili a questo indirizzo.

Alessandro

posted @ 24/09/2012 00:07 by Alessandro Del Sole

Rendere del codice sincrono "awaitable" con Task.Run

Come avrete visto, in area Video di Visual Basic Tips & Tricks sto pubblicando una nuova serie dedicata al pattern Async/Await per Visual Basic 2012, la cui pubblicazione verrà completata la prossima settimana.

Come avete imparato, la programmazione asincrona con Async/Await si basa sul concetto di task e sulla classe System.Threading.Tasks.Task. Questa classe offre parecchi metodi interessanti, che consentono di gestire attività "awaitable" di vario genere.

Ad esempio, supponiamo di avere del vecchio codice sincrono che però vogliamo eseguire in modalità asincrona sfruttando il nuovo pattern. Partiamo col simulare un lavoro intensivo, banale:

    Private Function SimulateIntensiveWork(token As CancellationToken) _
         
As Integer
        
Dim delay As Integer = 5000
        Threading.
Thread.Sleep(delay)

        
If token.IsCancellationRequested Then
            token.ThrowIfCancellationRequested()
        
End If

        
Return delay
    
End Function

Il codice non fa altro che bloccare il thread per 5 secondi. Così com'è, quest'attività non può essere asincrona. Fortunatamente esiste il metodo Task.Run che esegue il codice specificato in un thread secondario all'interno del Thread Pool. Sostanzialmente, dato questo codice:

    Private Async Function RunIntensiveWorkAsync() As Task
        cancellationToken = 
New CancellationTokenSource
        
'This runs on the UI thread
        
Console.WriteLine("Starting...")

        
Try
            
'This runs on a Thread Pool thread
            
Dim result As Integer = Await Task.Run(Function()
                                                       
Dim workResult As Integer = _
                                                        SimulateIntensiveWork(cancellationToken.Token)
                                                       
Return workResult
                                                   
End Function)
            
'This runs again on the UI thread
            
Console.WriteLine("Finished")
        
Catch ex As OperationCanceledException
            
Console.WriteLine("Canceled by the user.")
        
Catch ex As Exception

        
End Try
        
Console.ReadLine()
    
End Function

Inizio qualcosa nel thread principale, in questo caso in quello della UI. Poi, invocando Task.Run, eseguo il codice in un thread secondario aperto nel Thread Pool. Quando il risultato di questo task è stato ottenuto (da qui l'uso di Await), il thread chiamante continua con il suo lavoro e poiché viene restituito Task, questo metodo può essere awaitato:

    Async Function DoSomething() As Task
        
Await RunIntensiveWorkAsync()
    End Function

In questo modo:

  • vecchio codice sincrono può essere facilmente trasformato in asincrono
  • lo stesso diventa "awaitable" e quindi posso usare Await per attenderne il risultato
  • non devo scrivere codice per creare il thread, eseguirlo, stopparlo

Run vuole un delegate, sia esso passato come lambda che come metodo esplicito puntato con AddressOf. Questo delegate contiene il codice che noi vogliamo sia eseguito in modalità asincrona e che vogliamo rendere awaitable.

Alessandro

posted @ 21/09/2012 00:31 by Alessandro Del Sole

Partecipa al nostro evento "Visual Studio 2012 Tour" il 6 ottobre

Sabato 6 ottobre terremo un evento chiamato "Visual Studio 2012 Tour", con il quale intendiamo continuare a dare risalto al lancio di Microsoft Visual Studio 2012.

L'evento si terrà a Reggio Emilia e, ovviamente, la partecipazione è gratuita. Vi riassumo brevemente l'agenda, mentre vi rimando all'apposita pagina del nostro sito per i dettagli sull'evento, sulla location e sulla registrazione:

 9.00 - 9.30 Registrazione
 9.30 - 9.45 KeyNote
Alessandro Del Sole
 9.45 - 10.45 Interagire con i Charms di Windows 8 attraverso i Contracts
Alessandro Del sole
 10.45 - 11.45 Programmazione asincrona in Visual Basic 2012
Renato Marzaro
 11.45 - 12.45 Entity Framework 5 in Action
Antonio Catucci

Come vedete parleremo di argomenti assolutamente attuali e del tutto interessanti, soprattutto se volete fare il salto di passare a Windows 8.

Non dimenticate di registrarvi

Alessandro

posted @ 21/09/2012 00:17 by Alessandro Del Sole

Windows 8 Store Apps Starter Kit

Qualche giorno fa ho pubblicato sulla MSDN Code Gallery una sorta di starter kit che ho chiamato Windows 8 Store Apps Starter Kit, il cui scopo è quello di illustrare come implementare i contratti che consentono di interagire con i "charms" del nuovo sistema operativo, quindi:

  • Search contract, per la ricerca
  • Share contract, per condividire contenuti (non per riceverli però, almeno in questa v1)
  • Settings contract, per implementare due requirements necessari come richiesta di supporto e informativa sulla privacy se si fa uso della rete

Altre cosine carine: l'utilizzo delle secondary Tiles per "pinnare" dei contenuti su Start e implementare l'app bar con comandi aggiuntivi.

Il codice è rigorosamente in Visual Basic 2012. Non vogliatemene, amici di C#, ma per voi trovare esempi è molto più semplice e comunque non vi sarà difficile tradurlo

L'app di esempio in sé è banale nel senso che scarica un feed RSS dal Web e lo presenta, quello che non è banale è tutto ciò che sta intorno e per il quale l'esempio è stato pensato.

Lo potete scaricare anche dalla pagina degli esempi di Visual Studio 2012 (anche Express):

Sarò contento di leggere i vostri eventuali feedback e di migliorare il tutto.

Alessandro

posted @ 21/09/2012 00:08 by Alessandro Del Sole

L'app per Windows 8 di Visual Basic Tips & Tricks

A dire il vero è disponibile già da un po' di giorni, ma solo ora trovo il tempo di bloggare un po' in pace

Sullo Store di Windows 8 è disponibile l'app ufficiale del network di Visual Basic Tips & Tricks, che vi permette di avere sul vostro device tutti i contenuti dei nostri tre siti.

Per me è stato un altro modo di imparare tante altre cose sullo sviluppo di Windows 8 apps e di farmi un altro po' di esperienza.

La potete trovare qui (oltre che scaricare dallo Store): http://apps.microsoft.com/webpdp/it-IT/app/visual-basic-tips-tricks/df4dae76-74dc-4f1d-b4b1-e58238424bfb

Approfitto di questo post per rispondere a una domanda frequente: a che mi serve un'app che legge da Internet se ho già il browser?

Beh, è semplice:

  • un'app come questa aggrega contenuti da più siti in un'unica forma di presentazione, cosa che su un browser richiede aprire diverse schede o finestre e switchare tra loro.
  • un'app come questa permette (o dovrebbe permettere) di mettere in cache i contenuti, cosicché siano fruibili anche senza connettività, scenario assai frequente in Italia
  • Si ha la possibilità di presentare e formattare i contenuti in modo diverso e più adatto magari a un tablet (es. visualizzazione snapped, lettore multimediale che ho integrato)
  • un'app come questa può notificare all'utente la disponibilità di nuovi contenuti attraverso le Tile, senza necessità di aprire il browser (funzionalità per ora non disponibile, lo sarà in futuro)
  • l'app può interagire con i charms di Windows 8, quindi può sfruttare la funzionalità di ricerca su tutti i contenuti di tutti i siti per i quali vengono letti i feed, cosa non altrettanto facile da fare con un browser.

Chiaro che se devo fare un'app per mostrare un blog non ha senso, ma in casi come questo il senso è molto ampio.

Provatela, fateci sapere cosa ne pensate e cosa andrebbe migliorato o cosa manca!

Alessandro

posted @ 21/09/2012 23:58 by Alessandro Del Sole

Modificare una Build creata con VS2010 in VS2012

Scenario:

TFS 2010
VS 2010 e VS2012 side-by-side

Tempo fa avevo creato alcune builds con VS 2010 basate su alcuni template trovati su CodePlex (TFS Nugetter per la precisione). Oggi dovevo modificare alcuni parametri come il Configuration Build e... boom! Ecco cosa succede:




In sostanza è un problema di cast dovuto a reference ad assembly di versioni diverse (10.0.0.0 usate da VS2010 e 11.0.0.0 usate da VS2012).

Cercando in giro sono capitato su una segnalazione fatta su Microsoft Connect dove si imputa l'errore a VS 2010 che aggiunge il numero di versione degli assembly referenziati nei template di build.
La soluzione suggerita è quella di modicare lo xaml del template con notepad modificando (o elimimando) i numeri di versione degli assembly referenziati (io ho solo modificato la versione duplicando il template).

Perchè tutto funzioni, bisogna chiudere e riaprire la build dopo la modifica.

posted @ 20/09/2012 20:07 by Antonio "tdj" Catucci

Excel e VB.Net&hellip; sempre la solita storia

La salute adesso va bene, ringrazio quanti mi sono stati vicini e mi hanno dato forza. Quale miglior modo di ritornare all’opera se non quello di parlare, nella mia solita maniera (il lupo perde il pelo ma non il vizio) di un problema che ciclicamente si ripropone nei forum:

Come faccio a leggere/scrivere dati da e verso Excel?

Avevo già affrontato il problema (mio malgrado) nella mia attività lavorativa una prima volta nell’anno 2000 ed una seconda nel 2004, e poi successivamente ogni qual volta scrivo un programma nuovo. E questo perché, volente o nolente, qualsiasi utente PC che abbia poco più dell’intelligenza di una scimmia, impara, nell’ordine: Ad accendere il PC, a navigare su internet, a trovare i siti porno, ad usare LibroFaccia e la email, poi il Word e l’Excel.

Mi ricordo il mio Ex Amministratore di condominio che in Excel redigeva anche i verbali delle assemblee di condominio (il che è tutto detto).

Con questi presupposti ogni qual volta si tratta di avere una qualche tabella di dati, questa sicuramente si troverà in un foglio di Excel.

Come fare per scambiare i dati con Excel?

Di metodi fondamentalmente ne esistono 4:

  1. Usare un formato di interscambio tipo un cvs
  2. Usare OleDB/jet
  3. Usare le Api di office (come illustrato in una decina di articoli, tra i quali l’ottimo articolo di Diego qui).
  4. Usare un componente di terze parti che faccia quanto serve.

Il primo metodo richiede una qualche interazione da parte dell’utente, che normalmente preferisco evitare, e non consente di fare troppe cose.

Il secondo non consente un accesso pieno e totale al foglio, nel senso che non puoi formattare le celle, usare le formule etc.

Il terzo prevede che sul PC target ci siano le Api di Office installato, ed inoltre non è particolarmente veloce (provate a leggere o scrivere un file con 20.000 righe e poi mi dite).

Il quarto, a patto di scegliere la libreria giusta, è veloce, non ha dipendenze esterne (neanche richiede l’Office o l’Excel installato), ma richiede di dover aprire il portafogli e di dover pagare la libreria.

Fermo restando che ognuno è libero di usare il metodo che più gli aggrada, raccomando sempre di effettuare un’analisi costi/benefici e di non precludere a priori nessuna scelta.

Ad esempio, mi permetto di dare due suggerimenti su librerie commerciali che ho provato ed usato personalmente (prima una e poi l’altra) e che sono la GemBox.SpreadSheet Free di GemBox  e la FlexCelNet di TMS Software. Sicuramente ne esisteranno di migliori, se qualcuno ne conosce, me le segnali, sarò lieto di provarle.

Partiamo dalla Spreadsheet Free: udite udite… Limitata, GRATUITA e RIDISTRIBUIBILE anche in pacchetti commerciali a patto di linkare il sito della GemBox nel programma stesso.

Le limitazioni: 150 righe e 5 workSheet (fogli) nello stesso workbook. Direi che sono ACCETTABILI per un componente free, e nel tempo uno potrebbe scoprire che questa libreria va bene per il 99% dei casi.

Ovviamente io ho splafonato questo limite al secondo lavoro, quando ho dovuto elaborare un file di esportazione di un allevamento che vendeva sperma di coniglio a terzi che doveva essere spedito alla regione Piemonte (che tocca fa’ per campà).

Ho approfondito la ricerca ed ho trovato a 125 euro il componente di TMS Software del quale, nella licenza, ti danno anche i sorgenti. Il Gembox costa parecchio di più.

125 euro sono soldi, sempre meglio in tasca a me che in tasca a qualcun altro, ma quante ore fanno risparmiare?

Parecchie ed in due momenti.

Il primo è quando programmi, perché hai una programmazione MOLTO semplificata e pochi limiti.

Il secondo è quando installi: ZERO prerequisiti, metti il file nelle references e quando fai il deploy il gioco è fatto.

125 euro diviso per 10 euro l’ora (all’incirca come una donna delle pulizie) fanno 12,5 ore. Anche solo una ricerca su Google rischia di costarti di più (chiaro che parlo da uno che, in qualche maniera ha un ritorno economico dalla programmazione… se uno lo fa per hobby, allora anche 10 euro sono troppi).

Ma è effettivamente così facile e veloce da usare?

Proviamo:

Supponiamo di dover creare un file e di aggiungere un paio di dati:

Dim Xls As ExcelFile = New XlsFile(True)
Xls.NewFile(1) ' Qui creo il file, ma potrei aprirlo con Xls.Open
'impostiamo qualche valore
Xls.SetCellValue(1, 1, "Ciao VB")
Xls.SetCellValue(2, 1, 3)
Xls.SetCellValue(3, 1, 2.1)
'Impostiamo anche una formula
Xls.SetCellValue(4, 1, New TFormula("=Sum(A2,A3)"))
Xls.Save(NomeFile)

Semplice, vero? Ma supponiamo di voler fare qualcosa di più, che so… cambiare il colore ed il font delle celle:

Dim f As TFlxFormat= Xls.GetDefaultFormat
f.Font.Name="Times New Roman"
f.Font.Color= Color.Red

Creiamo un nuovo formato per le celle, quindi lo applichiamo alle celle interessate:

eDim XF As Integer= Xls.AddFormat(f)
Xls.SetCellFormat(2, 1, XF)
Xls.SetCellFormat(3, 1, XF)
Ok, sono solo quattro sciocchezze, ma provate a farle con i metodi da 1 a 3, e poi mi dite SE ci riuscite (i primi due) o con quanto lavoro ci riuscite (terzo metodo).
La lettura di dati da un file? Niente di più semplice…
Basta aprire il file on XLS.Open e leggere i dati con XLS.GetCellValue.
Veniamo ad un problema un minimo più pratico e così magari capirete perché questa libreria mi piace così tanto:
Supponiamo di dover creare un file fatto in una certa maniera, ad esempio 10 colonne magari colorate e con una certa intestazione, un’immagine e quant’altro. 
Come fare questa cosa complicata? Due modi possibili. Partire da un template e copiarlo ogni volta, oppure crearlo da programma. Ma vuoi mettere che Pa… aehm, che lavoro infame?
Esiste una utility, che si chiama APIMate che, dato un certo file Excel in ingresso, ti scrive il codice (VB, C#, Delphi) per ricrearlo uguale uguale!
Questo giusto per far capire come effettivamente sia facile, semplice e veloce fare le cose.
Con questo spero di aver dato qualche spunto di riflessione a quanti si scontrano o si scontreranno con questo problema.
Alla prossima

posted @ 20/09/2012 16:20 by Davide Bertolino

Visual Studio 2012 Express for Desktop disponibile

Da qualche giorno è disponibile per il download il tanto atteso Visual Studio 2012 Express for Windows Desktop, che permette di creare applicazioni Windows con WPF, Windows Forms e Console con .NET Framework 4.5.

Questo completa la famiglia delle edizioni Express che includono lo strumento per Windows 8 e quello per il Web.

Il prodotto è gratuito e andrà fatta la registrazione, anch'essa gratuita.

Download:

Alessandro

posted @ 15/09/2012 22:43 by Alessandro Del Sole

Windows 8 e WinRT: implementare il Settings contract

Come sapete, in Windows 8 è disponibile la barra dei c.d. "charm" che attivate scorrendo col dito (o col mouse) dal lato destro dello schermo verso il centro. La barra dei charm offre funzionalità di ricerca, condivisione, impostazioni, scorciatoie a funzioni di sistema.

Il ruolo dei charm è fondamentale, perché non solo lavorano con Windows ma si integrano con le app per cui queste possono sfruttare (attraverso i contracts) i charm stessi per cercare, condividere, impostare settings su sé stesse.

In questo post vedremo come implementare il Settings Contract e dotare un'app per Windows 8 della possibilità di prevedere impostazioni e fornire informazioni.

Per interagire con il charm dei settings si ricorre al namespace Windows.UI.ApplicationSettings. La prima cosa da fare è ottenere la visualizzazione corrente dell'app associata alla barra dei settings. Al caricamento della pagina principale dell'app utilizzeremo quindi il metodo GetForCurrentView della classe SettingsPane e in particolare ci metteremo "in ascolto" dell'evento CommandsRequested, che viene scatenato quando l'utente attiva il settings charm:

    Private Sub MainPage_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded

        AddHandler SettingsPane.GetForCurrentView.CommandsRequested, AddressOf OnCommandRequested

    End Sub

Prima di proseguire, facciamo una considerazione: perché dobbiamo implementare i settings? Indubbiamente può essere utile per memorizzare le preferenze dell'utente, che tendenzialmente andranno memorizzate in variabili poi serializzate nell'isolated storage. Ma i motivi fondamentali sono fondamentalmente due: in primo luogo perché l'app deve sempre offrire il modo di contattare il supporto tecnico e in secondo luogo perché, se fa uso di Internet, l'app deve mostrare la privacy policy; entrambe le cose si fanno nei settings. Ciò premesso, focalizziamo l'attenzione proprio su questi due aspetti piuttosto che vedere come memorizzare preferenze utente. Ciascuna voce che compare nel settings charm corrisponde a un'istanza della classe SettingsCommand, pertanto nel gestore dell'evento CommandsRequested definiremo due comandi, per le necessità di cui sopra. Ecco un esempio:

    Private Sub OnCommandRequested(sender As SettingsPane, args As SettingsPaneCommandsRequestedEventArgs)

        args.Request.ApplicationCommands.Clear()

        Dim privacyInfo As New SettingsCommand("privComm", "Privacy", Sub()

                                                                          ShowSettingsPanel()

                                                                      End Sub)

 

        Dim supportInfo As New SettingsCommand("suppComm", "Supporto", Async Sub()

                                                                           Await ShowSupportPanel()

                                                                       End Sub)

        args.Request.ApplicationCommands.Add(privacyInfo)

        args.Request.ApplicationCommands.Add(supportInfo)

    End Sub

Il costruttore di questa classe vuole un identificatore per il comando, il testo da visualizzare e un delegate che faccia qualcosa. Nel primo caso andremo ad aprire un apposito pannello, che implementeremo tra breve. Nel secondo caso lanceremo il client di posta predefinito, attività asincrona che vuole un Await. Entrambi i comandi confluiscono poi in una collezione di comandi chiamata ApplicationCommands.

Prima di tutto la cosa più facile, ossia un metodo asincrono che avvii il client di posta predefinito per inviare una mail al supporto tecnico:

    Private Async Function ShowSupportPanel() As Task

        Await Windows.System.Launcher.LaunchUriAsync(New Uri("mailto:supporto[@]visual-basic.it?subject=Aiutatemi", UriKind.Absolute))

    End Function

 Attraverso il metodo Windows.System.Launcher.LaunchUriAsync si può aprire un Url con il programma predefinito. Poi la parte difficile, ossia il pannello per mostrare la privacy policy. Per fare questo, così come per mostrare controlli all'utente per permettere di decidere le impostazioni, ci vuole uno user control. Ne creiamo uno chiamato AppSettings.xaml. Il codice è davvero banale, usiamo il pulsante Back predefinito e mostriamo un messaggio di testo che riassuma la nostra policy:

   <Border BorderBrush="Black" BorderThickness="2" Background="White">

        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="90"/>
                <RowDefinition/>
            </Grid.RowDefinitions>

            <Grid Grid.Row="0" Background="DarkGray">
                <Grid Margin="40,40, 0,0">
                    <Grid.Transitions>
                        <TransitionCollection>
                            <EntranceThemeTransition FromHorizontalOffset="50" />
                        </TransitionCollection>
                    </Grid.Transitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="50" />
                        <ColumnDefinition Width="2*" />
                    </Grid.ColumnDefinitions>
                    <Button Click="SettingsBack_Clicked"
                            Margin="0"
                            Grid.Column="0"
                            Style="{StaticResource BackButtonStyle}"
                            HorizontalAlignment="Left" />
                    <TextBlock Margin="10,4,0,0"
                               Grid.Column="1"
                               FontSize="28"
                               Text="Privacy policy"
                               HorizontalAlignment="Left" />
                </Grid>
            </Grid>

            <TextBlock Margin="40,20,0,0" Grid.Row="1" FontSize="20" Text="VB T&amp;T rispetta la tua privacy.
                       La connessione a Internet è richiesta solo per sfogliare i contenuti e
                       leggere i feed RSS ma nessuna informazione personale viene raccolta."
                   Foreground="Navy" TextWrapping="Wrap" />
        </Grid>
    </Border>

Nel chiudere il riquadro, il gestore del pulsante tratta il pannello come un popup e lo chiude:

    Private Sub SettingsBack_Clicked(sender As Object, e As RoutedEventArgs)

        Dim pop As Popup = CType(Me.Parent, Popup)

        If pop IsNot Nothing Then

            pop.IsOpen = False

        End If

    End Sub

Tornando alla pagina principale, non resta che implementare il delegate che invocherà il pannello in questo modo:

    Private _settingsPopup As Popup

    Private _settingsWidth As Double = 346

 

    Private Sub ShowSettingsPanel()

        Dim windowBounds As Rect = Window.Current.Bounds

 

        _settingsPopup = New Popup With { _

            .IsLightDismissEnabled = True, _

            .Width = _settingsWidth, _

            .Height = windowBounds.Height _

        }

        _settingsPopup.SetValue(Canvas.LeftProperty, windowBounds.Width - _settingsWidth)

        _settingsPopup.SetValue(Canvas.TopProperty, 0)

 

        Dim appSettingsPane As New AppSettings With { _

            .Width = _settingsWidth, _

            .Height = windowBounds.Height}

 

        _settingsPopup.Child = appSettingsPane

 

        _settingsPopup.IsOpen = True

    End Sub

 Il codice crea un popup delle dimensioni riferibili all'area prevista correntemente dal sistema, impostando gli angoli top e left. L'istanza del controllo utente è poi associata al popup, che viene così visualizzato.

Quando l'app è in esecuzione, il lavoro sopra svolto è visibile in due fasi. La prima all'apertura del settings charm:

La seconda quando attiviamo il comando della privacy:

Ovviamente potete anche sperimentare il comando del supporto.

Alessandro

posted @ 12/09/2012 02:43 by Alessandro Del Sole

Scarica "I'm a VB" per Windows 8

Se anche tu sei uno sviluppatore che usa Visual Basic e hai passione per questo linguaggio, e se hai già installato Windows 8 sulla tua macchina, puoi scaricare "I'm a VB", la mia prima app per il nuovo sistema operativo che ti permette di stare aggiornato su tutte le novità inerenti Visual Basic con update sia da canali Microsoft che dalla comunità degli MVP e altri esperti.

E' gratis ovviamente ed è stato il mio primo approccio allo sviluppo con WinRT per cui è sicuramente migliorabile, ma pur sempre una chicca da appassionati veri

La trovate nello Store di Windows 8, ma anche qui:

http://apps.microsoft.com/webpdp/it-IT/app/im-a-vb/71a1e8d9-a943-46be-973c-5676291c802a

Alessandro

posted @ 10/09/2012 18:26 by Alessandro Del Sole

WinRT: forzare la navigazione in un controllo WebView

Sempre a proposito del controllo WebView nelle Windows 8 Store Apps, sebbene in certi scenari l'utilizzo dei Frame sia molto più indicato, potrebbe capitarvi la necessità di forzare la navigazione dei contenuti visualizzati nel WebView stesso, come ad esempio un classico comando di back o forward.

L'eccezionalità del WebView sta nel fatto che è in grado di eseguire script; ad esempio, per forzare la navigazione alla pagina precedente, si può usare il metodo InvokeScript in questo modo:

Me.WebView1.InvokeScript("eval", {"history.go(-1)"})

 

Alessandro

Non vi capiterà spesso di farlo, ma se vi capita sapete come fare.

posted @ 10/09/2012 18:15 by Alessandro Del Sole

WinRT: visualizzare un contenuto offline col controllo WebView

Nello sviluppo di app per Windows 8 si ha a disposizione il controllo WebView che permette di visualizzare contenuti di tipo HTML o stringa, senza aver necessità di tutta l'infrastruttura di navigazione offerta invece dall'oggetto Frame.

Si può avere la necessità di visualizzare il contenuto di un file HTML che faccia parte del progetto, che non stia quindi né su Web né altrove.

Sfortunatamente in questa prima versione di WinRT tale controllo non supporta la navigazione diretta di file, di conseguenza bisogna ricorrere alla lettura dall'Isolated Storage come nel seguente codice:

Dim html = Await Windows.Storage.PathIO.ReadTextAsync("ms-appx:///Assets/LaMiaPagina.html")

Me.WebView1.NavigateToString(html)

Questo codice presuppone che ci sia un file .html nella sottocartella Assets del progetto e sfrutta il protocollo ms-appx. In sostanza si legge in modo asincrono, sotto forma di stringa, il contenuto del file specificato. Quando l'operazione asincrona è completata (e quindi Await ritorna) si può visualizzare il contenuto richiesto.

Alessandro

posted @ 10/09/2012 18:10 by Alessandro Del Sole

VB T&T ha un nuovo sito

Il nostro Team è orgoglioso e felice di annunciare che finalmente Visual Basic Tips & Tricks è online con un nuovo e tanto atteso portale!

Dopo molti anni di onorato servizio, il vecchio sito basato su Classic ASP (che peraltro è sempre stato un orologio svizzero) ha lasciato il posto a un nuovissimo, moderno e organizzatissimo portale basato su tecnologia .NET e che offre un'ottima organizzazione dei contenuti, oltre ad essere esteticamente accattivante e indubbiamente al passo coi tempi.

Il nuovo portale è chiaramente orientato al cosiddetto Web 2.0, quindi integrazione con i social network più diffusi per la condivisione dei contenuti ed offre un'interessante piattaforma per la riproduzione dei video. Spariscono le care mailing list, ma di contro sarà possibile sottoscrivere i vari forum e ricevere le notifiche direttamente via email, inoltre proprio i forum sono stati rivisti per avere come target le più recenti tecnologie Microsoft per lo sviluppo.

Vista la mia ben nota esperienza di sviluppatore Web , il mio apporto è stato abbastanza marginale e limitato. I ringraziamenti vanno ai nostri Antonio Catucci e Renato Marzaro, che hanno sviluppato l'intero portale e hanno passato notti insonni e weekend sottratti al loro tempo libero per realizzare la nuova casa di tutta la comunità di VB T&T, e a Diego Cattaruzza che ha dato un notevole contributo soprattutto in termini di test e traducendo i moduli dall'inglese.

Complimenti quindi al Team e un invito a voi tutti a continuare a seguirci e a dare i vostri feedback sull'uso del portale.

Alessandro

posted @ 10/09/2012 17:41 by Alessandro Del Sole

Evento live per il lancio di Visual Studio 2012

Giovedì 13 settembre, il giorno dopo il lancio ufficiale, noi di Visual Basic Tips & Tricks in collaborazione con la community OrangeDotNet, vi faremo vedere un pò di novità su Visual Studio 2012 con un live meeting a partire dalle 18.

Io e il buon Diego vi faremo fare un bel tour nell'IDE di Visual Studio 2012 facendovi vedere un po' le novità più interessanti (farvi vedere tutto non sarebbe possibile...).

Per consultare l'agenda e recupera il link dello streaming, leggete qua.
Vi ricordo che per partecipare dovete installare il client di LiveMeeting,le cui istruzioni le trovate la prima volta che accedete, e considerando che l'evento è accessibile mezz'ora prima, preparatevi per tempo :)

Vi aspettiamo!

posted @ 10/09/2012 17:17 by Antonio "tdj" Catucci

Visore di foglio Excel (spartano ma carino)

 

Visore di foglio Excel, spartano ma carino (e istruttivo)

Questo programmino fa seguito a due miei studi: un’analoga soluzione che sfrutta il controllo DataGridView di un Form (comparsa su Visual Basic Tips & tricks) e il post relativo all’utilizzo in varie salse di OLE Automation comparso su questo mio blog. Considerando, magari a torto, più macchinoso e per me ostico il DataGrid che ci passa il convento WPF, mi sono chiesto se non fosse possibile emularlo, almeno per una visura read-only, con una serie di volgari Label e TextBox disposte in una Grid WPF in modo da imitare uno spazio di celle dello spreadsheet.

Prima di procedere, vanità m’induce ad anticipare una variante originale, descritta in fondo a questo articolo. In due parole, consiste in queste mosse, valide (solo?) in ottica read-only:

1.       Aprire con OLE una certa cartella di lavoro;

2.       Inserire i valori delle celle da A1 all’ultima in una matrice di stringhe;

3.       Chiudere Excel;

4.       Procedere operando su tale matrice.

Tornando alla soluzione normale, con un (bel) po’ di pazienza ho ottenuto un layout dall’aspetto seguente:

 

A

B

C

D

E

F

1

 

 

 

 

 

 

2

 

 

 

 

 

 

3

 

 

 

 

 

 

4

 

 

 

 

 

 

5

 

 

 

 

 

 

6

 

 

 

 

 

 

 

In realtà nel mio caso ho previsto 16 righe con altrettante caselle di testo. Ma chi vuole può ampliare a piacere questa “finestra” di 16 righe x 6 colonne sul foglio Excel, dato che il codice VB (o C#, chi avrà interesse alla traduzione) proposto è in parte ma non del tutto indipendente da tale scelta.

XAML essenziale

A costoro, per innata pigrizia indico solo due brani XAML: Il primo è relativo alle etichette che descrivono le intestazioni di riga e colonna:

<Label Height="25" Grid.Row="1" HorizontalAlignment="Center" Name="Riga1"

                  Content="1" Width="50" HorizontalContentAlignment="Center" Background="LightBlue" Margin="0,2,0,1" />

        <Label Height="25" Grid.Row="2" HorizontalAlignment="Center" Name="Riga2"

Eccetera

<Label Grid.Column="1" HorizontalAlignment="Center" Name="Colonna1"

                  Content="A" Width="95" HorizontalContentAlignment="Center" Background="LightBlue" Margin="0,2,0,0" />

        <Label Grid.Column="2" HorizontalAlignment="Center" Name="Colonna2"

Eccetera

Spero sia chiaro che le label delle righe hanno nomi mnemonici Riga1, Riga2, ..., Riga16 e contenuti (Content) da 1 a 16. Analogamente, Colonna1, Colonna2, . . ., Colonna7 sono i nomi delle etichette intestatarie dai Content “A”, “B”,... “F”.

Il secondo brano è inerente alle (mie) TextBox 16 x 6:

<TextBox Grid.Row="1" Grid.Column="1" Height="25" HorizontalAlignment="Left" Margin="0,1" Name="Cella1_1"

                 Width="95" />

        <TextBox Grid.Row="2" Grid.Column="1" Height="25" HorizontalAlignment="Left" Margin="0,2,0,1" Name="Cella2_1"

                 Width="95" />

        <TextBox Grid.Row="3" Grid.Column="1" Height="25" HorizontalAlignment="Left" Margin="0,2,0,0" Name="Cella3_1"

                 Width="95" />

Eccetera.

I cui nomi, per farla breve, sono del tipo CellaN_M con N e M pari alla riga e colonna di appartenenza nella Grid.

Nella finestra WPF vanno poi collocati pulsanti e un paio di semplici controlli, volti a caricare via OLE Automation il Foglio1 di un certo file .xlsx, disporne i valori delle celle in A1:F15 nelle corrispondenti Texbox sopra accennate, modificare riga e colonna iniziale e altre faccende. Per avarizia... spaziale ne vedremo l’azione man mano che procede la disamina del codice scatenato dai vari clic.

Il codice VB

Premessa doverosa. In quel che segue non mi sono troppo preoccupato di ottimizzare il codice, sul presupposto che un utente non del tutto idiota compia azioni in una sequenza logica, ossia PRIMA caricare un certo file, POI spostare riga o colonna, INFINE chiudere il programmino.

Ciò detto esaminiamo senza ulteriori indugi la parte iniziale, invitando a tener presente le variabili comunitarie, da mioExcel a MatrValori escluso (che servirà a una variante interessante e, forse, originale... Suspence!)

Imports Microsoft.Office.Interop.Excel ' Si può anche evitare!

 

Class MainWindow

    Dim mioExcel As Microsoft.Office.Interop.Excel.Application

    Dim IntestRighe, IntestColonne

    Dim MatrCelle

    Dim Zona As Microsoft.Office.Interop.Excel.Range

    Dim swPrimoGiro As Boolean = False

    Dim swFileCaricato As Boolean = False

    Dim ZonaFoglio As Microsoft.Office.Interop.Excel.Range ' Intervallo da A1 a ultimacella

    Dim MatrValori(,) As String

 

    Private Sub CaricaMatrCelle()

        MatrCelle =

             {{Cella1_1, Cella2_1, Cella3_1, Cella4_1, Cella5_1, Cella6_1, Cella7_1, Cella8_1, Cella9_1, Cella10_1, Cella11_1, Cella12_1, Cella13_1, Cella14_1, Cella15_1},

             {Cella1_2, Cella2_2, Cella3_2, Cella4_2, Cella5_2, Cella6_2, Cella7_2, Cella8_2, Cella9_2, Cella10_2, Cella11_2, Cella12_2, Cella13_2, Cella14_2, Cella15_2},

             {Cella1_3, Cella2_3, Cella3_3, Cella4_3, Cella5_3, Cella6_3, Cella7_3, Cella8_3, Cella9_3, Cella10_3, Cella11_3, Cella12_3, Cella13_3, Cella14_3, Cella15_3},

             {Cella1_4, Cella2_4, Cella3_4, Cella4_4, Cella5_4, Cella6_4, Cella7_4, Cella8_4, Cella9_4, Cella10_4, Cella11_4, Cella12_4, Cella13_4, Cella14_4, Cella15_4},

             {Cella1_5, Cella2_5, Cella3_5, Cella4_5, Cella5_5, Cella6_5, Cella7_5, Cella8_5, Cella9_5, Cella10_5, Cella11_5, Cella12_5, Cella13_5, Cella14_5, Cella15_5},

             {Cella1_6, Cella2_6, Cella3_6, Cella4_6, Cella5_6, Cella6_6, Cella7_6, Cella8_6, Cella9_6, Cella10_6, Cella11_6, Cella12_6, Cella13_6, Cella14_6, Cella15_6}}

    End Sub

 

    Private Sub ApriFile()

        If swFileCaricato Then Exit Sub

        IntestRighe = _

        {Riga1, Riga2, Riga3, Riga4, Riga5, Riga6, Riga7, Riga8, Riga9, Riga10, Riga11, Riga12, Riga13, Riga14, Riga15}

        IntestColonne = {Colonna1, Colonna2, Colonna3, Colonna4, Colonna5, Colonna6}

        CaricaMatrCelle()

        mioExcel = New Microsoft.Office.Interop.Excel.Application

        ' Carica l’archivio .xls

        mioExcel.Workbooks.Open(txtFile.Text)

        ' mioExcel.Visible = True ' Usato per debug. Il default occulta Excel

        Dim RigaFormule = mioExcel.Range("RigaFormule")

        With RigaFormule

            .Copy(mioExcel.Range("F2:H15"))

        End With

        MatrCelle(1, 1).Text = IniCella.Value

        Zona = mioExcel.Range("A1:F15")

        If swPrimoGiro Then

            For i = 0 To IntestRighe.Length - 1

                IntestRighe(i).content = i + 1

            Next

            IntestColonne(0).Content = "A"

            For i = 1 To IntestColonne.Length - 1

                IntestColonne(i).Content = NextIntest(IntestColonne(i - 1).Content)

            Next

            swPrimoGiro = False

        End If

        InserZonaInGriglia()

        swFileCaricato = True

        mioExcel.DisplayAlerts = False

    End Sub

 

Dopo quanto già detto, ai buoni intenditori non occorre dire che CaricaMatrCelle, come dichiara il suo nome, pone nelle varie righe e colonne di un oggetto (si badi bene!) MatrCelle le TextBox che sappiamo e va da sé che questa parte va modificata in conseguenza da chiunque scegliesse un diverso layout (idem per i brani relativi alle Label delle intestazioni).

NOTA. L’adozione del tipo Object per MatrCelle qui si è resa indispensabile, per motivi che vari guru interpellati non hanno saputo chiarire. Idem per IntestRighe e IntestColonne. Pazienza e prendiamone atto.

 

Quanto ad ApriFile, esordisce caricando le varie Label in IntestRighe e IntestColonne e la matrice di TextBox, richiamando CaricaMatrCelle poi pone in mioExcel una nuova istanza OLE di Excel il cui insieme WorkBooks viene arricchito col metodo Open dell’archivio .xlsx. Il pathname completo di quest’ultimo si trova nella casella di testo txtFile. Qui chiedo venia: è un esempio didattico e addirittura ho previsto per default un file particolare nel quale esiste una zona RigaFormule che viene un po’ rozzamente copiata in basso. Questo solo per ricordare che certi archivi (noti!) possono essere aggiornati dinamicamente persino in un caso read-only. Gl’interessati a qualcosa di più serio possono togliere queste righe e, meglio ancora, utilizzare il ben noto controllo che dà accesso a un qualsiasi file Excel nel file system ospite.

Tralasciando altri dettagli, passo senz’altro a sottoporre a chi legge la Sub che inserisce i valori dell’intervallo Zona (definito a livello Dichiarazioni, rivedere) ovvero A1:F15 nel nostro caso. Mi astengo, a questo punto, da commenti e lo stesso faccio un po’ antipaticamente con le routine dedicate ad aggiungere / togliere una riga. Trattasi di RigaSucc e RigaPrec entrambe lanciate da Button ad hoc (o più smaglianti oggetti WPF, magari a forma di freccia) e a loro volta facenti capo a CambiaRighe.

    Private Sub InserZonaInGriglia()

        For i = 0 To MatrCelle.GetUpperbound(0) ' UBound(MatrCelle, 1)

            For j = 0 To MatrCelle.GetUpperBound(1) ' UBound(MatrCelle, 2)

                MatrCelle(i, j).Text = Zona.Cells(j + 1, i + 1).Value

            Next

        Next

    End Sub

 

    Private Sub CambiaRighe(ByVal GiuSu As Boolean)

        Dim Delta As Integer = IIf(GiuSu, 1, -1)

        If Delta < 0 And IntestRighe(0).Content = 1 Then Exit Sub

        For i = 0 To IntestRighe.Length - 1

            IntestRighe(i).Content += Delta

        Next

    End Sub

 

    Private Sub RigaSucc()

        If IntestRighe Is Nothing Then Exit Sub

        CambiaRighe(True)

        Zona = Zona.Offset(1)

        InserZonaInGriglia()

    End Sub

 

    Private Sub RigaPrec()

        If IntestRighe Is Nothing Then Exit Sub

        If IntestRighe(0).Content = "1" Then Exit Sub

        Zona = Zona.Offset(-1)

        InserZonaInGriglia()

        CambiaRighe(False)

    End Sub

 

Più complicato il discorso sulle Sub ColonnaSucc e ColonnaPrec, esse pure scatenate da controlli ad hoc. Stavolta il tormentone è come passare a un intestazione successiva, ossia da A a Z, poi AA, AB, …, AB, …, AZ , .., BA, BB, ..., ZZ, AAA eccetera eccetera (eredità dell’originario Visicalc) oppure precedendo a ritroso. Provvedono a tali scopi, rispettivamente, le routine NextIntest e PrecedIntest dal non ambiguo nomignolo.

Per pigrizia le affido all’esegesi autogestita dei più esperti a titolo di non disutile esercizio. Altri soggetti meno motivati le considerino come ricette. Che funzionano.

    Private Sub ColonnaSucc()

        If IntestColonne Is Nothing Then Exit Sub

        For i = 0 To IntestColonne.Length - 1

            IntestColonne(i).Content =

                NextIntest(IntestColonne(i).Content)

        Next

        Zona = Zona.Offset(0, 1)

        InserZonaInGriglia()

    End Sub

 

    Private Sub ColonnaPrec()

        If IntestColonne Is Nothing Then Exit Sub

        If IntestColonne(0).Content = "A" Then Exit Sub

        For i = 0 To IntestColonne.Length - 1

            IntestColonne(i).Content =

                PrecedIntest(IntestColonne(i).Content)

        Next

        Zona = Zona.Offset(0, -1)

        InserZonaInGriglia()

    End Sub

 

    Private Function NextIntest(ByVal OldIntest As String) As String

        Dim LastCar As Char, NumCar As Integer

        Dim NextCar As Char

        Dim i As Integer

        NumCar = OldIntest.Length

        LastCar = OldIntest(NumCar - 1)

        Select Case OldIntest

            Case "Z"

                Return "AA"

                Exit Function

            Case "ZZ"

                Return "AAA"

                Exit Function

            Case Else

                For i = NumCar To 1 Step -1

                    LastCar = OldIntest(i - 1)

                    If Asc(LastCar) < Asc("Z") Then ' Char.ConvertToUtf32(LastCar, 0) < Char.ConvertToUtf32("Z", 0) Then

                        NextCar = Chr(Asc(LastCar) + 1)

                        ' OldIntest = OldIntest.Remove(i - 1, 1)

                        ' OldIntest = OldIntest.Insert(i - 1, NextCar)

                        OldIntest = OldIntest.Remove(i - 1, 1).Insert(i - 1, NextCar)

                        ' Mid(OldIntest, i) = NextCar

                        Return OldIntest

                        Exit Function

                    Else

                        NextCar = "A"

                        Mid(OldIntest, NumCar) = NextCar

                    End If

                Next

                Return OldIntest

        End Select

    End Function

 

    Private Function PrecedIntest(ByVal OldIntest As String) As String

        Dim LastCar As Char, NumCar As Integer

        Dim NextCar As Char

        Dim i As Integer

        NumCar = OldIntest.Length

        LastCar = OldIntest(NumCar - 1)

        Select Case OldIntest

            Case "AA"

                Return "Z"

                Exit Function

            Case "AAA"

                Return "ZZ"

                Exit Function

            Case Else

                For i = NumCar To 1 Step -1

                    LastCar = OldIntest(i - 1)

                    If Asc(LastCar) > Asc("A") Then

                        NextCar = Chr(Asc(LastCar) - 1)

                        OldIntest = OldIntest.Remove(i - 1, 1).Insert(i - 1, NextCar)

                        ' Mid(OldIntest, i) = NextCar

                        Return OldIntest

                        Exit Function

                    Else

                        NextCar = "Z"

                        Mid(OldIntest, NumCar) = NextCar

                    End If

                Next

                Return OldIntest

        End Select

    End Function

 

Tutto il codice si conclude come segue, anche qui senza commenti di sorta (salvo le critiche su cui ho messo le mani avanti in apertura).

    Private Sub ChiudiFile()

        If Not swFileCaricato Then Exit Sub

        mioExcel.DisplayAlerts = False

        mioExcel.Quit()

        mioExcel = Nothing

        swPrimoGiro = True

        swFileCaricato = False

        IntestRighe = Nothing

        IntestColonne = Nothing

        MatrCelle = Nothing

    End Sub

End Class

 

Una variante curiosa, comunque elegante

L’ideuzza anticipata all’inizio l’ho sperimentata con un procedimento un po’ differente, che vado a proporre senza menare segugi nel cortile antistante la fattoria (alias can per l’aia).

Private Sub InserMatrInGriglia(ByVal rIniz As Long, ByVal cIniz As Long)

        Dim i As Integer, j As Integer, r As Long, c As Long

        r = rIniz : c = cIniz

        Dim MaxRiga As Integer = MatrCelle.GetUpperbound(0)

        Dim MaxCol As Integer = MatrCelle.GetUpperbound(1)

        Dim MaxIndRiga As Long = MatrValori.GetUpperBound(0)

        Dim MaxIndCol As Long = MatrValori.GetUpperBound(1)

        For i = 0 To MaxCol

            For j = 0 To MaxRiga

                If r > MaxIndRiga Or c > MaxIndCol Then

                    MatrCelle(j, i).Text = ""

                Else

                    MatrCelle(j, i).Text = MatrValori(r, c)

                End If

                c += 1

            Next

            c = cIniz

            r += 1

        Next

    End Sub

 

Private Sub FoglioInMatrice()

        Static swGiroUnico As Boolean = True

        If swGiroUnico Then

            IntestRighe = {Riga1, Riga2, Riga3, Riga4, Riga5, Riga6, Riga7, Riga8, Riga9, Riga10, Riga11, Riga12, Riga13, Riga14, Riga15}

            IntestColonne = {Colonna1, Colonna2, Colonna3, Colonna4, Colonna5, Colonna6}

            CaricaMatrCelle()

            mioExcel = New Microsoft.Office.Interop.Excel.Application

            ' Carica l’archivio .xls

            mioExcel.Workbooks.Open(txtFile.Text)

            Dim IniCella = mioExcel.Range("A1")

            Dim UltimaCella As Microsoft.Office.Interop.Excel.Range = _

mioExcel.Range("A1").SpecialCells(Microsoft.Office.Interop.Excel.XlCellType.xlCellTypeLastCell)

            ZonaFoglio = mioExcel.Range(IniCella(1), UltimaCella(1))

            Dim Nr As Long, Nc As Long

            With ZonaFoglio

                Nr = .Rows.Count

                Nc = .Columns.Count

            End With

            ReDim MatrValori(Nr - 1, Nc - 1) ' Considera la base 0 di una matrice

            Dim Cella As Microsoft.Office.Interop.Excel.Range

            Dim i As Long = 0

            Dim j As Long = 0

            For Each Cella In ZonaFoglio ' celle spazzolate per righe / colonne!

                ' Sostituisci celle vuote con un blank in MatrValori

                MatrValori(i, j) = IIf(Cella.Value Is Nothing, "", Cella.Value)

                j += 1

                If j = Nc Then

                    j = 0

                    i += 1

                End If

            Next

            mioExcel.DisplayAlerts = False

            mioExcel.Quit()

            mioExcel = Nothing

            Zona Foglio = Nothing

            swGiroUnico = False

        End If

End Sub

 

Cominciamo dalla... seconda che ho detto (disgustosa imitazione di Corrado Guzzanti). In sintesi essa dopo la solita apertura via OLE del solito file .xlsx nella già vista casella txtFile individua l’intervalloZonaFoglio le cui celle diagonali sono Inicella (che poi è A1) e UltimaCella, ottenuto con una speciale funzione (che ho un po’ sudato nel tradurla dal linguaggio macro a quello .NET). In tal modo tale zona si estende solo alle celle utili e non all’intero, enorme foglio di lavoro. Dopo di che un duplice ciclo For ... Next piazza i valori di ZonaFoglio nella MatrValori sostituendo le celle vuote (di valore Nothing) con stringhe vuote. Si noti una finezza frutto di una mia scoperta, ossia che un loop tipo For Each Cella In ZonaFoglio procede automaticamente per righe e colonne, ma poi il ricorso agli indici i e j è inevitabile per MatrValori.

Dimenticavo di dire che ZonaFoglio e MatrValori sono definite a livello Dichiarazioni (rivedere).

La procedura si conclude abbandonando Excel e le variabili mioExcel e ZonaFoglio. Da tale momento si agisce sulla MatrValori per il lavoro di inserimento nelle TextBox della nostra MatrCelle. Provvede al riguardo la InserMatrInGriglia secondo gli argomenti rIniz e cIniz Qui giunto lascio ogni commento interamente al paziente e solerte visitatore, cui propongo solo una banale routine di prova denominata Prova per sfrenata immaginazione, ove potrà sbizzarrirsi a cambiare l’istruzione evidenziata in grassetto, osservando non di nascosto l’effetto che fa:

Sub Prova()

    Dim rIn As Long, cIn As Long

    rIn = 3 : cIn = 4

    IntestRighe(0).content = rIn + 1

    For i = 1 To UBound(IntestRighe)

        IntestRighe(i).Content = IntestRighe(i - 1).Content + 1

    Next

    IntestColonne(0).Content = "A"

    ' Cambia prima intestazione di colonna secondo cIn

    For i = 0 To cIn

        IntestColonne(0).Content = NextIntest(IntestColonne(0).Content)

    Next

    ' Cambia le altre intestazioni

    For i = 1 To UBound(IntestColonne)

        IntestColonne(i).Content = NextIntest(IntestColonne(i - 1).Content)

    Next

    InserMatrInGriglia(rIn, cIn)

End Sub

 

(Va da sé che Prova ha senso solo dopo che è stata lanciata FoglioInMatrice.)

Conclusioni

Un giorno o l’altro proverò a rifare la soluzione descritta inizialmente utilizzando una MatrValori anziché MatrCelle e, conseguentemente, InserMatrInGriglia in luogo di InserZonaInGriglia. La qual cosa richiede tra l’altro una riscrittura delle routine RigaSucc, RigaPrec, ColonnaSucc e ColonnaPrec. Un compito che chi ne ha voglia potrebbe svolgere in proprio.

A questo punto il dibattito è aperto su un paio di punti: a) la reale utilità, a fronte delle complicanze aggiuntive, di tradurre una zona Excel in una normale matrice; b) persino la vera necessità di un visore Excel.

Circa il primo punto ritengo che il vantaggio stia nella minor occupazione di RAM, piuttosto che in termini velociferi. Sul secondo non mi pronuncio, insisto però nel dire che il trattamento di fogli di lavoro quasi sempre sottintende una tabella classica, con soli campi e record, mentre uno spreadsheet è un modello a celle sparse. Già a suo tempo ho molto sofferto per “ficcarlo” in una DatagridView. Non me la sono sentita di ripetere tale faticaccia con la DataGrid  di WPF, ritenendo tale controllo, forse non a torto, ancor meno flessibile.

Ogni commento in merito sarà gradito, qui o tramite email.

giannigiac@tin.it

 

REPETITA IUVANT

Rivisitando il mio vecchio Visore di Excel su VB T&T ho riscoperto due cose (ah, la memoria! A volte vacilla...): a) che allora utilizzai su una DatagridView il formato Open XML (OOXML) di Office; b) che sviluppai una più compatta versione delle funzioni che danno le intestazione di colonna successiva e precedente. Circa il primo punto che OOXML è sì più moderno e veloce rispetto alla tecnologia OLE Automation, ma non si applica a precedenti formati XLS.

Sul secondo, per comodità degli interessati riporto le due funzioni:

Function SuccIntest(ByVal Intest As String) As String

        Dim i As Integer

        Dim Car As Char

        i = Intest.Length

        While i >= 1

            Car = Intest(i - 1)

            If Car <> "Z"c Then

                Dim CodAsc = Char.ConvertToUtf32(Car, 0)

                Dim SuccCar = Char.ConvertFromUtf32(Codasc + 1)

                Intest = Intest.Substring(0, i - 1) & _

                         SuccCar & Intest.Substring(i)

                Return Intest

            Else ' Car è "Z"

                Intest = Intest.Substring(0, i - 1) & "A" _

                         & Intest.Substring(i)

                If i = 1 Then

                    Return "A" & Intest

                End If

                i = i - 1

            End If

        End While

        Return Intest

    End Function

 

    Function PrecedIntest(ByVal Intest As String) As String

        Dim i As Integer

        Dim Car As Char

        i = Intest.Length

        While i >= 1

            Car = Intest(i - 1)

            If Car <> "A"c Then

                Dim CodAsc = Char.ConvertToUtf32(Car, 0)

                Dim PrecCar = Char.ConvertFromUtf32(CodAsc - 1)

                Intest = Intest.Substring(0, i - 1) & _

                         PrecCar & Intest.Substring(i)

                Return Intest

            Else

                If Intest.Length = 1 Then Return Intest

                If i = 1 Then

                    Intest = Intest.Remove(0, 1)

                    Return Intest

                End If

                Intest = Intest.Substring(0, i - 1) & "Z" _

                         & Intest.Substring(i)

                i = i - 1

            End If

        End While

        Return Intest

    End Function

posted @ 06/09/2012 22:40 by Gianni Giaccaglini

Visual Studio 2012, Entity Framework, DbContext per default e i RIA Services

Come forse sapete con la versione 5 di ADO.NET Entity Framework è stato introdotto un nuovo paradigma chiamato Code First, basato su una classe chiamata DbContext che è più snella dell'ObjectContext e che richiede la stesura del modello a oggetti scrivendo le proprie classi.

Se non avete mai sentito parlare di Code First, il nostro Antonio Catucci ha un articolo che fa per voi.

Poiché questo approccio ha ottenuto un discreto successo, con Visual Studio 2012 gli Entity Data Model generati dall'IDE e modificabili da designer non usano più l'ObjectContext e il suo ecosistema, ma direttamente la classe DbContext, con la DbSet ecc. ecc.

Questo è importante perché, sebbene a design-time molte differenze possono passare inosservate, in fase di scrittura del codice dovremo essere pronti a usare i nuovi metodi.

C'è un particolare scenario, però, da tenere in considerazione: i WCF RIA Services. Quando aggiungete un nuovo EDM con Visual Studio 2012 a un RIA Service, tale EDM si baserà sulla classe DbContext ma la classe DomainService e la collega LinqDomainService supportano solo la ObjectContext.

Infatti, se si tenta di aggiungere una DomainService a un progetto in cui c'è un Entity Data Model nuovo, Visual Studio non sarà in grado di rilevare le entità. La soluzione è convertire l'EDM affinché usi la classe ObjectContext.

Per fare questo si va nel designer del modello, tasto destro -> Properties. Si modifica il valore della proprietà Code Generation Strategy da None a Default. Poi in Solution Explorer si eliminano i due file con estensione .tt (nidificati nel file .Edmx) e si ricompila il progetto.

A questo punto tutto è tornato come nel passato e VS 2012 sarà in grado di far vedere a una classe domain service le vostre entità.

Alessandro

posted @ 05/09/2012 19:35 by Alessandro Del Sole

Community Days 2013 - Milano, 27 e 28 febbraio

CommunityDays.it

Iniziano ad accendersi i motori dell'organizzazione dell'evento community più grande e importante d'Italia, i Community Days 2013, a cui parteciperanno gli User Group e le community italiane dedicate alle tecnologie Microsoft, sia dal lato sviluppo che dal lato IT Pro.

L'evento si terrà il 27 e il 28 febbraio 2013 in Peschiera Borromeo (MI), presso la sede di Microsoft Italia, come la scorsa edizione.

E' stata ufficialmente aperta la Call for Papers, grazie alla quale potrete proporre le vostre sessioni che verranno poi valutate e selezionate. 

La Call for papers rimarrà aperta fino alla mezzanotte del 30 novembre. Ovviamente seguiranno comunicazioni più dettagliate man mano che ci avvicineremo all'evento. Da inserire intanto nei Preferiti

Alessandro

posted @ 04/09/2012 22:03 by Alessandro Del Sole

Partecipa all'Open Data Hackaton a Milano e puoi vincere un premio!

Si terrà a Milano il 15 settembre una giornata dedicata allo sviluppo di applicazioni per Windows 8, Windows Phone e Windows Azure che facciano utilizzo degli Open Data esposti dalla Regione Lombardia.

Partecipando si può accedere al concorso Open App Lombardia, grazie al quale è possibile vincere anche dei premi in denaro.

L'evento è gratuito ed è un'ottima occasione per incontrare altri sviluppatori e divertirsi sviluppando insieme applicazioni con gli Open Data con il supporto esclusivo di esperti Microsoft e delle Community. Una giornata pratica e molto interattiva per realizzare le tue applicazioni e partecipare al concorso. Inoltre potrai testare le tue applicazioni per Windows 8 su Tablet Samsung, le app Windows Phone su Nokia Lumia e le app di Windows Azure gratuitamente nella Cloud.

Per l'agenda e la registrazione all'evento, visitate questa pagina.

Alessandro

posted @ 04/09/2012 21:49 by Alessandro Del Sole

Introduzione alla interfaccia di Windows 8, by Charles Petzold

Introduzione alla interfaccia di Windows 8

 

NOTA IMPORTANTE. Alla fine l'Editore ci ha in formato che una versione più ampia è prevista per NOVEMBRE  prossimo. Nell'attesa riteniamo che comunque convenga procurarsi questa valida guida introduttiva alla programmazione nel nuovo mondo Windows 8...

Questo testo spigliato e, insieme, approfondito, è l’ultimo lavoro di un personaggio mitico, Charles Petzold, pioniere del mondo PC e Windows e autore di innumerevoli articoli su PC Magazine e di molti libri tra cui un bestseller dedicato alla programmazione sotto Windows. Ecco come si presenta il simpatico ma sempre vispo vecchietto: 

Introduzione alla interfaccia di Windows 8

Pagine 600

Prezzi:

Libro stampato $ 60,49

Ebook: $ 20,00 (OFFERTA SPECIALE)

Microsoft Press

Un pregio del testo sta nell’approccio immediate, senza troppi giri di parole, anche se un prerequisito è il possesso di un buon background della programmazione .NET e, specialmente, delle soluzioni WPF (Windows Presentation Foundation). Infatti un punto saliente del nuovo mondo e delle sue soluzioni in stile Metro che Charles mette subito in luce è il largo impiego della programmazione “dichiarativa”, ossia in linguaggio XAML. Così anche noi attacchiamo con due semplici esempi ripresi dal libro, Nei quali chi mastica un po' di WPF non avrà difficoltà a comprenderne il significato (con pochi cambiamenti).

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <MediaElement Source="http://www.charlespetzold.com/pw6/AudioGreeting.wma" /> Grid>

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <MediaElement Source="http://www.charlespetzold.com/pw6/VideoGreeting.wmv" /> Grid>

Sommario dei contenuti

Come è noto, Windows 8 è stato ridisegnato per creare le famose "app" con interfaccia fullscreen e ottimizzate per contatto col dito,  Charles Petzold guada passo passo gli sviluppatori nel miglior uso degli strumenti forniti dal Windows Runtime tramite XAML e C#, fornendo anche (rari) esempi in C++ . Il manuale si articola in due parti:

  • Part I, “Elementals,” begins with the interrelationship between code and XAML, basic event handling, dynamic layout, controls, templates, asynchronous processing, the application bar, control customization, and collections. You should emerge from Part I ready to create sophisticated page-oriented collection-based user interfaces using the powerful ListView and GridView controls.
  •  Part II, “Specialties,” explores topics you might not need for every program but are essential to a well-rounded education in Windows 8. These include multitouch, bitmap graphics, interfacing with share and search facilities, printing, working with the sensors (GPS and orientation), text, obtaining input from the stylus (including handwriting recognition), accessing web services, calling Win32 and DirectX functions, and bringing your application to the Windows 8 app store.

La familiarità con WPF / XAML facilita l'apprendimento, inoltre gli esempi, pur partendo dal classico "Hello World" cucinato in molte salse offrono spunti interessantissimi persino a chi restasse legato al WPF. Tuttavia le novità dell'impianto sono simili ma piuttosto differenti. Perché anche se restano, mutatis mutandis, concetti basilari come le Attached e le dependency property il contenitore base è una Page (anziché un Window di WPF). Questa a sua volta può contenere una griglia Grid (o una Canvas). E tale Griglia può come in WPF suddividersi in righe Row e colonne Column al cui interno si collocano le cosiddette "tiles", tegole o piastrelle tipiche dei mondi che Window 8 sposa, poste su un'unica finestra.

Ma è anche possibile limitarsi a una sola Grid contenente diversi Children che si possono disporre come l'esempio seguente lascia, perlomeno, intuire:

<Page >

   <Page.Content>

      <Grid >

         <Grid.Children>

            <TextBlock />

            <TextBlock />

            <TextBlock />

         Grid.Children>

      Grid>

   Page.Content>

Page>

Lo spazio ci obbliga a fermarci qui. Da ultimo però va detto che nel complesso il libro privilegia la nuova interfaccia utente. Ne risultano lacune su altri temi, soprattutto il binding a database, Linq e altro. Perfino la discussione su controlli base è scarsa o persino assente. Probabilmente l'autore ha ritenuto che tali oggetti e i relativi eventi, a partire dal Click magari col dito, fossero sostanzialmente immutati?

Probabilmente non è così, come si evince rileggendo la nota che abbiamo posto in apertura.

 

 

 

posted @ 29/08/2012 17:32 by Gianni Giaccaglini

CyberEasyManager, il gestionale portatile si aggiorna

Disponibile un aggiornamento per CyberEasyManager: la versione 2.1 introduce migliorie nel sistema di fatturazione.
Sul sito tutti i dettagli: www.cybereasymanager.it

Per aggiornarvi avviate il software e il sistema di aggiornamenti automatici vi informerà dell'aggiornamento. In alternativa avviate "Aggiornamenti on-line" dall'omonima voce nel menu Strumenti o nel Menu Avvio. L'updater penserà a scaricare e installare l'aggiornamento in modo completamente automatico e trasparente.

posted @ 28/08/2012 21:41 by Sergio Pappalardo

Festeggiamo il lancio di Visual Studio 2012 con un evento online targato VB T&T

Come forse sapete, Microsoft erogherà un evento mondiale online per il lancio di Visual Studio 2012, che si terrà il giorno 12 settembre p.v. e per il quale potete seguire questo indirizzo.

Visual Basic Tips & Tricks vuole celebrare il lancio di Visual Studio 2012 con un altrettanto scintillante evento online, che terremo giovedì 13 settembre 2012 alle ore 18. Parleremo di sviluppo per Windows 8, delle novità dell'IDE, di linguaggi, di codice cross-Platform riutilizzabile e avremo il grande piacere di avere con noi anche la mitica Laura La Manna, neo-MVP per Visual C#.

Come di consueto, erogheremo l'evento online attraverso la piattaforma di Live Meeting. Il link che potrete usare per accedere all'evento è il seguente: https://www.livemeeting.com/cc/mvp/join?id=MPFPW7&role=attend&pw=Z%3B92g%29%2Bdd

Clicca qui per aggiungere l'evento al calendario di Outlook.

Vi ricordo che l'accesso all'evento è consentito a partire da 30 minuti prima dell'inizio. Ecco l'agenda:

Ore 18 – Keynote (Alessandro Del Sole, Microsoft MVP)

Ore 18.15 – Sviluppare app per Windows 8 con Visual Basic 2012 (Renato Marzaro, Microsoft MVP)

Windows 8 è il nuovo sistema operativo che connette un ambito prettamente Consumer-oriented con il classico desktop  e la produttività di business. Windows 8 introduce un nuovo modello di sviluppo che affianca quello desktop, basato sulle “app” e su un Microsoft Store online simile a quello di Windows Phone. In questa sessione muoveremo i primi passi nello sviluppo con questa piattaforma con particolare riguardo a XAML e VB.NET.

Ore 19.00 – Le novità di C# 5.0 (Laura La Manna, Microsoft MVP)

C# 5.0 porta con sé due importanti novità. Una riguarda la possibilità di scrivere più velocemente e in maniera più robusta codice asincrono, grazie all'utilizzo delle due nuove keyword async e await. L'altra è relativa alla possibilità di realizzare in maniera più semplice sistemi di diagnostica per le nostre applicazioni utilizzando i Caller Information Attribute. Nel corso della sessione dopo aver mostrato i vantaggi e le insidie del nuovo  Task-based Asynchronous Pattern basato su await e async di  C#, si descriverà quali sono e come utilizzare i Caller Information Attribute.

Ore 19.45 – Visual Studio 2012, what’s new (Antonio Catucci e Diego Cattaruzza, Microsoft MVP)

In questa sessione verrà fatta una panoramica generale sulle novità dell’ambiente di sviluppo (IDE) per piattaforma .NET e Windows 8 evidenziando gli strumenti a disposizione per migliorare la qualità e la quantità del nostro codice.

Ore 20.30/20.45 – Break

Ore 20.45 – Scrivere codice riutilizzabile su più piattaforme: Windows Desktop, Windows 8, Windows Phone, Web (Alessandro Del Sole, Microsoft MVP)

Con la crescente esigenza di far interagire tra loro più piattaforme client, Web e mobili, cresce anche la necessità da parte degli sviluppatori di riutilizzare quanto più possibile lo stesso codice in modo che sia condivisibile su più scenari. In questa sessione vedremo come Visual Studio 2012 sia l’ambiente d’eccellenza per scrivere codice riutilizzabile in WPF, Silverlight, Windows Phone e Windows 8.

Se siete iscritti a Facebook potete anche seguire la pagina dedicata all'evento, disponibile qui. 

Inutile dire che vi aspettiamo numerosi e non dimenticate di coinvolgere anche i vostri colleghi o amici di community!

Alessandro

posted @ 27/08/2012 00:58 by Alessandro Del Sole

Le versioni di Windows 8

Come sapete Windows 8 è rilasciato in sole 3 (4) versioni

Core (o semplicemnte Windows 8)

Professional

Enterprise

RT (destinata solamente a device Tablet, non potrà essere acquistata in quanto solamente preinstallata a bordo del device)

Vi segnalo questo interessante post

Windows 8 Secrets, Beyond the Book: Guide to Product Editions

in cui è possibile capire rapidamente in modo semplice le differenze fra queste versioni.

Renato Marzaro

posted @ 27/08/2012 14:47 by Renato Marzaro

Le linee guida per l'interfaccia utente delle app in Windows 8 ora in PDF

Le app che sviluppiamo per Windows 8 devono rispettare delle linee guida per l'interfaccia utente, questo da sempre.

Tali linee guida, già disponibili in MSDN, sono anche scaricabili in formato PDF e costituiscono un bel volumetto di circa 300 pagine.

L'indirizzo da cui effettuare il download è questo. Inutile dire che si tratta di una lettura ovvia e fondamentale se si vuole sviluppare per Windows 8, con la comodità di avere le guidelines a disposizione anche off-line.

Alessandro

posted @ 24/08/2012 21:24 by Alessandro Del Sole

Installare i Code Contracts sulla RTM di Visual Studio 2012

Probabilmente avrete sentito parlare dei Code Contracts, una libreria già presente nel Framework a partire dalla versione 4.0 e disponibile anche nella 4.5.

In sintesi, si tratta di una libreria che permette di eseguire porzioni di codice al verificarsi di condizioni determinate. Ne parlai in modo molto più dettagliato in questo articolo su VB T&T.

Se la libreria fa parte del Framework, ci sono però dei tool che permettono di impostare delle opzioni all'interno dell'IDE di Visual Studio e questi vanno scaricati da questa pagina MSDN.

Detti tool funzionano anche con la RTM di Visual Studio 2012, ma una volta installati non sono subito visibili. Sebbene altri prima di me ne abbiano parlato, riprendo la questione per due ragioni: la prima è che ora siamo in RTM e prima no , la seconda è che ho trovato un post un po' fuorviante su un forum MSDN in cui si dice che basta fare un reboot della macchina dopo l'installazione per averli disponibili.

Beh, non è così. Vale ancora lo stesso vecchio trucchetto pre-RTM. Da un command prompt lanciato con privilegi amministrativi, è sufficiente digitare: devenv.exe /setup

Fatto questo, la tab dei Code Contracts risulterà visibile anche in Visual Studio 2012.

Alessandro

posted @ 23/08/2012 01:22 by Alessandro Del Sole

Hai domande su Windows 8? Passa dai forum MSDN!

I forum MSDN italiani si arricchiscono di uno specifico spazio dedicato allo sviluppo di app per Windows 8 in stile "Modern UI", pertanto gli sviluppatori hanno ora a disposizione un nuovo punto di incontro per chiarire i propri dubbi e per porre le proprie domande.

Il forum è raggiungibile a questo indirizzo ed è apprezzabile il fatto che ci sia qualcosa di localizzato in così poco tempo.

Ci vediamo da quelle parti

Alessandro

posted @ 23/08/2012 20:57 by Alessandro Del Sole

Kinect for Windows: Aggiornamento Developer Toolkit (v1.5.2)

Disponibile per il download l’aggiornamento 1.5.2 del Developer Toolkit per Kinect for Windows

L’aggiornamento comprende :

WPFD3Dinterop   Un nuovo esempio che dimostra l’interoperabilità fra DirectX 11 e una applicazione WPF

Migliorie in riproduzioni di Kinect Studio

Potete leggere l’annuncio ufficiale del rilascio Kinect for Windows: Developer Toolkit Update (v1.5.2)

Renato Marzaro

posted @ 22/08/2012 15:34 by Renato Marzaro

Gestione di Progetti con Visual Studio 2012 e Visual Studio 2010

Una delle novità di Visual Studio 2012 è la possibilità di aprire le stessa soluzione con Visual Studio 2012 e Visual Studio 2010.

Se volete sapere cosa c’è dietro le quinte di questa ‘magia’ potete leggere questo post

Visual Studio project compatability and VisualStudioVersion

Renato Marzaro

posted @ 22/08/2012 15:21 by Renato Marzaro

XAML Spy il Tool per &lsquo;spiare&rsquo; XAML

Visto che ormai XAML è parte integrante del Ns lavoro di sviluppatori vi segnalo questo interessante tool che vi permette di analizzare RunTime XAML di applicazioni Silverlight, Windows Phone, WinRT and WPF.

 

 

Potete trovare maggiori informazioni sul prodotto sul sito del produttore XAML Spy

Renato Marzaro

posted @ 22/08/2012 15:10 by Renato Marzaro

LightSwitch: Gestione Ristorante un esempio di Integrazione con OData e Unity3D

Vi segnalo questo post

LightSwitch Restaurant Manager (OData and Unity3D)

dove potete vedere una interessante soluzione di integrazione di LightSwitch con il mondo Android/iOS mediante OData

 

per approfondimenti sull’utilizzo di OData in LightSwitch vi consiglio la lettura di questi articoli del Ns Alessandro del Sole

LightSwitch: nuovi articoli su OData

Renato Marzaro

posted @ 22/08/2012 15:02 by Renato Marzaro

NetDuino ora si pu&ograve; programmare anche in Visual Basic

NetDuino la famosa piattaforma HardWare Open Source che utilizza come sistema operativo il .NET Micro Framework

 

 

 

 

 

 

ora è completamente compatibile con la programmazione in .NET Visual Basic grazie all’immediata implementazione della versione RTM del .NET Micro Framework 4.2

Potete leggere l’annuncio ufficiale Announcing: .NET MF 4.2 upgrade for all Netduino hardware

Renato Marzaro

posted @ 22/08/2012 14:48 by Renato Marzaro

Windows Store e Windows Phone Store Account Sviluppatori GRATIS per abbonati MSDN

Come sapete per poter pubblicare una applicatione (WinRT) sul Windows Store o sul Windows Phone Store è necessario sottoscrivere un abbonamento annuale al relativo store.

La novità è che dal 15/08/2012 (data di pubblicazione di Windows 8 e Visual Studio 2012) tutti gli abbonati MSDN possono richiedere un account gratuito, della durata di 12 mesi, per entrambi gli Store.

Per informazioni su come accedere a tale benefit accedere al proprio Account MSDN nella sezione ‘My Account’

Renato Marzaro

posted @ 22/08/2012 14:28 by Renato Marzaro

Rivivi gli eventi su Windows 8

Nel caso aveste perso gli eventi per Windows 8 organizzati da MSDN Italia recentemente, potete riviverli accedendo alle registrazioni per sviluppatori e designer.

Ecco i link:

E se avete un abbonamento MSDN, mi raccomando iniziate la preparazione psicologica al download di Windows 8 e Visual Studio 2012 RTM in barba alle festività

Alessandro

posted @ 13/08/2012 21:33 by Alessandro Del Sole

Introduzione pratica alle Apps di Windows 8

 

Introduzione pratica alle Apps di Windows 8

Uno dei pezzi, diremmo, più “ghiotti” del nuovo mondo Windows 8 è la possibilità di creare soluzioni particolari in stile “Metro”:  le cosiddette Apps, che poi Microsoft stessa si impegna a diffondere sul Windows Store, gestendone le royalty, come già avviene con analogo “magazzino” Mac.

Ben venga dunque questo piccolo libro che O’ Reilly ha dedicato al tema, pubblicandolo nei mesi estivi.

Getting Started with Windows 8 Apps

A guide to the Windows  runtime

By Ben Dewey

 

Pagine 110

PREZZI:
Libro stampato:               $ 14,99

Ebook:  $ 9,99

Prima di proseguire, ci sembra giusto segnalare due altri più corposi manuali da tempo dedicati alla programmazione sotto Windows 8, il primo del prolifico autore Charles Petzold e per i tipi di Microsoft Press.

 Programming Windows®, 6th Edition

By Charles Petzold

Editore: Microsoft Press

Pagine 800

PREZZI:
Libro stampato:               $ 60,49

Ebook:  $ 20,00 (OFFERTA SPECIALE)

Programming C# 5.0

Building Windows 8 Metro, Web, and Desktop Applications for the .NET 4.5 Framework

Pagine 800

PREZZI:
Libro stampato:               $ 54,99

Ebook:  $ 43,99

Ulteriori notizie e possibili acquisti si possono avere o effettuare su

www.oreilly.com

Come si costruisce una App in stile Metro

Venendo all’aureo libretto che qui recensiamo, esso rappresenta una guida pratica corredata  da esempi per illustrare l’intero processo della creazione di app touch-enabled in stile Metro. Il lettore viene così guidato nel concreto sviluppo seguendo il nuovo modello applicativo Windows Runtime. Di fatto il caso esposto è una app per la ricerca di immagini sfruttando il motore di ricerca Bing di Microsoft. Come si comprende, l’esempio, nella sua tipicità, è  ben azzeccato.

Va subito detto che un prerequisito è un’adeguata conoscenza del mondo Metro (e qui, a nostro avviso, il testo del Petzold torna utile). Inoltre il libro parla a gente che possiede già buona padronanza del mondo .NET. Tuttavia i capitoli iniziali offrono chiari richiami sulla programmazione sotto Windows 8, a partire dal nuovo stile (mutuato da Android) composto da “piastrelle” (tile) affiancate sulle quali navigare e cliccare col dito. Viene subito evidenziato che una App può assumere aspetti e stili variegati, con tile piccole o grandi con animazioni fantastiche. Accanto alle tile primarie dell’applicazione se ne possono definire altre, ad esempio una app meteo che offre informazioni sul tempo di casa nostra.

Oggetto di richiamo e successiva trattazione sono le nuove Application Bar.

Sono elencati i molti linguaggi supportati, a partire dal JavaScript con HTML5/CSS3, comunque gli esempi sono svolti in C# con XAML. A tale riguardo riportiamo un brano XAML che ha il pregio di tranquillizzare tutti coloro che già apprezzano questo linguaggio dichiarativo, che costituisce un’intelaiatura base per una App.

<Grid.RowDefinitions>

    <RowDefinition Height="Auto" />

    <RowDefinition />

</Grid.RowDefinitions>

<Grid.ColumnDefinitions>

    <ColumnDefinition />

    <ColumnDefinition />

</Grid.ColumnDefinitions>

<TextBox x:Name="SearchQuery" />

<Button Content="Search" Grid.Column="1" Click="Search_Click" />

Davvero molto semplice (e familiare). Dopo di che, ci affidiamo a una certa auto-eloquenza del seguente snippet parziale, sperando che il richiamo a librerie Bing sia intuitivo:

using System.Collections.Generic;

using System.Data.Services.Client;

using System.Threading.Tasks;

namespace Bing

{

    public static class BingSearchContainerExtensions

{

    public static Task<IEnumerable<T>> ExecuteAsync<T>(

    this DataServiceQuery<T> query)

{

    return Task.Factory.FromAsync<IEnumerable<T>>(

    query.BeginExecute, query.EndExecute, null);

. . .

// add 'using Bing;'

// add 'using System.Net;'

private async void Search_Click(object sender, RoutedEventArgs e)

{

    string accountKey = "<AccountKey>";

    var context = new BingSearchContainer(

    new Uri("https://api.datamarket.azure.com/Data.ashx/Bing/Search"));

    context.Credentials = new NetworkCredential(accountKey, accountKey);

    var result = await context.Image(this.SearchQuery.Text,

    "en-US", null, null, null, null).ExecuteAsync();

    ImagesList.ItemsSource = result.ToList();

}

In sintesi, l libro procede lungo le linee seguenti, quando occorre con corredo di codice XAML / C#.

-  Panoramica delle funzionalità di Windows 8 dallo Start Screen alla Application Bar.

-  Costruzione di una app per reperire immagini col motore Bing in veste di web service.

-  Descrizione dei componenti occorrenti per completare la app, come la UI e il cosiddetto“tombstoning”.

-  Utilizzo delle feature native del s.o., come tile, file picker, e sharing request.

- Esposizione delle operazioni necessarie per pubblicare una app sul Windows Store.

http://blog.shareoffice.it/giannigiaccaglini/articles/11234.aspx

 

posted @ 09/08/2012 14:05 by Gianni Giaccaglini

Windows 8 e Visual Studio 2012 in RTM: ci siamo!

Ieri sera (in Italia) Microsoft ha annunciato che Windows 8 e Visual Studio 2012 con .NET 4.5 hanno finalmente raggiunto lo stato di Release To Manufacturing, il che significa che entrano finalmente in produzione.

Come annunciato dal Team di Windows in questo post, gli abbonati MSDN potranno scaricare Windows 8 a partire dal 15 agosto mentre altri programmi hanno date diverse specificate sempre nel citato post, oltre alla precisazione che il sistema operativo sarà disponibile al pubblico a partire dal 26 ottobre anche su nuovi pc (e aspettiamo i tablet )

Start_Default_RTM_3ROW

Per quanto riguarda Visual Studio 2012 e .NET Framework 4.5, il rilascio è previsto tramite abbonamento MSDN sempre a partire dal 15 agosto come annunciato da S. Somasegar.

E' stato anche annunciato un evento di lancio per il giorno 12 settembre, per i cui dettagli potete visitare il sito http://visualstudiolaunch.com

Ci aspetta un agosto molto caldo! Stiamo entrando nella nuova era di Windows, sia come consumer che come sviluppatori. E voi siete pronti?

Alessandro

posted @ 02/08/2012 16:32 by Alessandro Del Sole

Pronte le versioni RTM di Windows 8 e Visual Studio 2012

A due mesi dall'uscita delle Release Candidate, oggi sono state annunciate le versioni RTM sia di Windows 8 che di Visual Studio 2012 con .NET Framework 4.5 annesso, ovviamente.

L'attesa, però, continua perchè i download per gli abbonati MSDN saranno disponibili solo a partire da ferragosto.
Pazienza, ci rilasseremo sotto il sole nell'attesa ;-)

posted @ 01/08/2012 23:39 by Antonio "tdj" Catucci

Agosto inizia con Outlook.com

Microsoft ci sta dando dentro in vista dell'immediato futuro, pieno di novità succose.

Ieri è stato annunciato Outlook.com, un portale Web per la gestione delle caselle di posta elettronica del futuro. Sostanzialmente si può pensare alla controparte Web di Outlook 2013, quindi con interfaccia orientata al touch, collegamenti social, integrazione con la cloud. Uno screenshot pubblicato dal team di Outlook:

Si possono provare le funzionalità del nuovo portale accedendo con un Live ID esistente, ma è anche possibile migrare quest'ultimo a un account @Outlook.com oppure creare un nuovo account @Outlook.com, così da essere i primi ad averne uno

Il team di Outlook ha pubblicato un blog post in cui descrive in dettaglio le varie novità della piattaforma della posta elettronica e in cui sostanzialmente si capisce che da Hotmail si passa ad Outlook.com, mantenendo comunque il proprio indirizzo.

Date un'occhiata, tutto è ora più touch-oriented ma bello.

Alessandro

posted @ 01/08/2012 14:35 by Alessandro Del Sole

LightSwitch: nuovi articoli su OData

Recentemente è stata completata la pubblicazione di tre miei nuovi articoli relativi a una delle più importanti novità in Visual Studio LightSwitch 2012, ossia il supporto per il protocollo OData.

La serie di articoli si chiama "Your data everywhere" e si propone di far capire come, grazie a OData, le applicazioni LightSwitch possono interscambiare dati con svariati altri tipi di client.

La serie è pubblicata da InformIT ed è così composta:

  1. OData support in Visual Studio LightSwitch, un'overview introduttiva su OData e su come LightSwitch sia in grado di referenziare ed elaborare origini dati di questo tipo, in aggiunta a quelle già precedentemente supportate.
  2. Exposing LightSwitch Data as OData services to other clients, un articolo che descrive come i dati nei database usati da LightSwitch possano essere esposti come servizi OData e consumati da altri client, con un esempio con Excel PowerPivot.
  3. Consuming LightSwitch's OData services from Windows Phone apps, in cui si dimostra come, grazie ad OData, applicazioni per Windows Phone possano interagire con fonti dati gestite dalle applicazioni LightSwitch.

OData costituisce, oltre al venturo client HTML, la novità più importante di LightSwitch 2012 e vi consiglio vivamente di dare un'occhiata alla tematica poiché vi permetterà di risolvere una miriade di problematiche e di utilizzare gli stessi dati con svariate tipologie di applicazioni, incluse quelle per dispositivi mobili.

Alessandro

posted @ 27/07/2012 15:25 by Alessandro Del Sole

Concorso &lsquo;OpenApp Lombardia&rsquo; sviluppa e vinci

Interessante concorso riservato ai ‘giovani’ programmatori (max 35enni) per lo sviluppo di Web App o App Mobile (qualsiasi piattaforma) che utilizzino gli Open Data presenti sul portale dati.lombardia.it

Maggiori info sul portale dedicato al concorso OpenApp Lombardia

questi, invece, i premi in palio :

 

Renato Marzaro

posted @ 27/07/2012 02:45 by Renato Marzaro

Annunciata la conferenza Build 2012

Seguendo la scia dello scorso anno, in cui Windows 8 fu svelato al mondo, Microsoft ripeterà l'annuale conferenza per sviluppatori riprendendo il nome "BUILD", la cui edizione 2012 si terrà a Redmond dal 30 ottobre al 2 novembre.

L'annuncio non sorprende, atteso che tutti ormai sappiamo che Windows 8 verrà rilasciato ad ottobre p.v.

Le registrazioni apriranno l'8 agosto 2012, nel frattempo potete tenere d'occhio il sito della conferenza.

Alessandro

posted @ 25/07/2012 23:49 by Alessandro Del Sole

Affari miei, scusate

Lo so che non si dovrebbe e sono pronto a sottostare a tutte le punizioni che il team vorrà infliggermi.

Venerdì, a causa di un grave scompenso cardiaco, sono stato ricoverato in cardiologia presso l'ospedale della mia città.

Solo poche parole per giustificare una frequentazione di questi lidi che sarà piuttosto sporadica avendo cose più importanti da fare.

A chi va in ferie ed a chi non ci va, i miei migliori auguri.

 

posted @ 23/07/2012 22:38 by Davide Bertolino

WPC 2012: partono i motori!

Leaderboard_728x90.gif

Si sono già accesi i motori della conferenza italiana più importante dell'anno, la famosa WPC edizione 2012, che si terrà ad Assago (MI) nei giorni 20/21/22 Novembre.

Molte le novità di questa edizione, tra cui la possibilità di fruire di uno sconto sull'iscrizione davvero notevole se paragonato agli anni scorsi e valido fino al 10 agosto p.v.

Anche quest'anno avrò l'onore di essere tra gli speaker, tenendo due sessioni:

  • What's new in Visual Basic 2012
  • What's new in Visual Studio LightSwitch 2012

Entrambe hanno una certa rilevanza se consideriamo l'imminente rilascio di Visual Studio 2012 in versione definitiva. Ma tutta l'agenda è molto appetitosa e ci saranno, come sempre, argomenti relativi alle più importanti innovazioni dal mondo Microsoft (tra cui Windows 8, SQL Server 2012, Visual Studio 2012 e .NET 4.5 ecc.)

Cosa aspettate ad iscrivervi? Io ci sarò e vi aspetto!

Alessandro

posted @ 23/07/2012 18:26 by Alessandro Del Sole

Aggiornato l'Office Integration Pack per Visual Studio LightSwitch

E' stato rilasciato un'aggiornamento del noto Office Integration Pack per Visual Studio LightSwitch, che ora funziona anche con Visual Studio 2012.

Nel post di annuncio di Beth Massi vengono riepilogate le principali funzionalità che consistono in:

  • Importazione di righe da fogli di lavoro di Excel direttamente nei record del database
  • Esportazione a Excel, con inclusa formattazione dei campi
  • Esportazione verso Word
  • Creazione di documenti PDF
  • Automazione di Outlook per inviare email e creare appuntamenti in calendario

Nel post citato Beth mostra come esempio un PDF creato con questa estensione in cui viene mostrato il mio libro Visual Studio LightSwitch Unleashed, all'interno del quale trovate peraltro spiegazioni sull'utilizzo di questa estensione. Felicissimo per la menzione e per essere preso a esempio

Interessante novità: già da un po' l'Office Integration Pack è su CodePlex, il che vuol dire codice sorgente, documentazione, discussioni, esempi.

Potete rinunciare a tutto ma non a questo pack. Ricordatevi però che, eccezion fatta per l'invio di email, il tutto lavora solo sulle applicazioni desktop.

Alessandro

posted @ 18/07/2012 00:07 by Alessandro Del Sole

Disponibili le sessioni del Windows 8 Designer Event di Milano

Ieri (11 luglio 2012) si è tenuto a Milano, presso la sede di Microsoft Italia, l'evento Windows 8 Designer dedicato allo sviluppo di app Metro-style per Windows 8 con particolare riguardo agli aspetti di progettazione e design, quindi non solo codice ma soprattutto l'approccio che dovremmo seguire nel realizzare app che rispettino le linee guida ma soprattutto che forniscano la migliore esperienza di interazione per l'utente.

Le registrazioni delle sessioni sono già disponibili su Channel 9 a questo indirizzo. Sono state tenute da speaker di elevatissimo livello (complimenti agli amici MVP Marco Leoncini e Alessandro Scardova) e illustrano sicuramente degli step imprescindibili.

Date un'occhiata, buon download e buona visione

Alessandro

posted @ 12/07/2012 16:11 by Alessandro Del Sole

Dal Team di LightSwitch nuovi articoli sulla v2

Il Team di Visual Studio LightSwitch ha pubblicato un paio di articoli veramente interessanti che riguardano le succose novità della v2 del prodotto.

Vi segnalo, al riguardo, i seguenti articoli:

Non dimenticate poi di seguire il blog della grandissima Beth Massi, non da ultimo il suo post sui contenuti community di giugno 2012 in cui compare anche il sottoscritto.

Alessandro

posted @ 11/07/2012 04:00 by Alessandro Del Sole

Problematiche nel passaggio tra beta di Windows 8

In questi giorni mi è capitato di rispondere a qualche email in cui si evidenziavano problemi nel migrare app Metro per Windows 8 originariamente sviluppate sulla Consumer Preview, per poi passarle alla Release Preview e alla RC di Visual Studio 2012.

Nulla è scontato e nulla è immutabile, ma tendenzialmente in uno stato di Release Candidate le cose sono abbastanza definite. A tal proposito è di fondamentale importanza leggere lo specifico documento che Microsoft ha redatto per rendere meno indolore il passaggio da Consumer Preview a Release Preview delle proprie app.

Si tratta di un bel malloppo di pagine, ma è davvero importante. Vi segnalo questo post di Lorenzo Barbieri in cui, oltre al link per il download del documento, ci sono importanti indicazioni pratiche.

Alessandro

posted @ 11/07/2012 03:47 by Alessandro Del Sole

Lab su Windows 8, Metro e XAML

Vi segnalo che nel blog del team di MSDN Italia sono in corso di pubblicazione una serie di post dedicati allo sviluppo di app Metro-style per Windows 8, per il momento dal lato XAML + C#/VB.

E' possibile scaricare i file dei lab in formato Word, al fine di fare un percorso Step-by-Step che guiderà fino alla creazione di un'app completa e che permetterà di imparare la maggior parte delle caratteristiche tipiche delle app Metro.

Potete seguire la categoria denominata Windows 8 Tutorial, intanto questo è il riepilogo dei post:

Prima parte

Seconda parte

Terza parte

Alessandro

posted @ 11/07/2012 03:42 by Alessandro Del Sole

Rilasciata Patch per Visual Studio 2012 RC

E’ stata rilasciato un aggiornamento/patch per Visual Studio 2012 RC

La potete scaricare qui :

July 2012 Update for Microsoft Visual Studio 2012 RC

Renato Marzaro

posted @ 06/07/2012 23:27 by Renato Marzaro

Windows 8 Designer Evento a Milano 11/07/2012

Partecipa anche tu al primo evento dedicato completamente al design e alla progettazione di applicazioni Metro per il nuovo sistema operativo Windows 8.

Non perdere l’occasione di essere tra i primi a creare un’app per il sistema operativo del futuro!

Durante l’evento potrai scoprire tanti consigli utili, linee guida da seguire, esempi concreti e le ultime novità.

 

Per Agenda ed Registrazione

Windows 8 Designer Event

 

Renato Marzaro

posted @ 04/07/2012 14:09 by Renato Marzaro

STM32F4-Discovery: sviluppare con NetMicroFramework al prezzo di un Arduino.

Nel mio ultimo post avevo parlato del porting del Net Micro Framework (di qui in seguito NetMF) per STM32F407 effettuato da Oberon, Ghi ed altri, come del mio pensiero di sviluppare una schedina custom, basata su quel chip, che, alla bisogna, potesse essere utilizzata in ambiente industriale o, comunque, in un prodotto finito e con tutta la periferia che mi serve.

Naturalmente, dove mi converrà utilizzerò il NetMF, dove invece non mi converrà, me ne guarderò bene.

Prima di partire a testa bassa con lo sviluppo della schedina, conviene provare i componenti fisicamente. Normalmente mi affido a terze parti che sviluppano delle demo board (KEIL, Embedded Artists, Olimex) di costo relativamente basso. Questa volta la scheda target è quella prodotta dalla ST e si chiama STM32F4-Discovery (di qui in seguito Discovery), che si può comperare un po’ dappertutto (RS, Digikey) ma anche Watterott (anche se qualche euro più cara) a prezzi che non superano i 17 euro IVA compresa, che uniti ad un minimo di spedizione rimangono comunque compatibili con una scheda ARDUINO di quelle a più basso costo.

La scheda ha una superficie doppia rispetto a quella di un Arduino standard ed offre quattro strisce passo 2.54mm standard, sui quali sono collegati praticamente tutti i piedini del micro.

Vale la pena di ricordare come l’Arduino standard renda disponibili 14 I/O digitali e 6 analogici su due strip a passo 2.54mm ma non montabili su una millefori standard, e che questo “male” affligga tutte le duino-like, quindi anche le varie NetDuino.

Inoltre la Discovery offre alcune periferiche tra le quali un uscita audio, un accelerometro, dei led ed una MicroUSB.

L’alimentazione viene prelevata dall’altra USB (mini), che fornisce il collegamento diretto per il debug verso alcuni tra i compilatori più conosciuti (es Keil e IAR). L’alimentazione può però essere fornita anche attraverso le strip, così come il debug può essere effettuato tramite l’ingresso SWD (sempre passo 2.54) per debugger di altro tipo (tipo il mio RedProbe+).

Essendo una scheda di basso costo è stata prodotta sul classico doppia faccia, manca un buon disaccoppiamento delle alimentazioni verso il micro (e pensare che le BLM non costano uno sproposito), così come un minimo di protezione esd sugli ingressi. Ma per meno di 20 euro che posso pretendere?

Anche se la Discovery nasce per altre cose, rimane tuttavia un buon punto di partenza per partire a sviluppare su NetMF spendendo una cifra ragionevole, soprattutto se paragonata al costo di una Netduino Go o di una Gadgeteer, avendo comunque una scheda che, al bisogno, può diventare un punto di partenza anche per sviluppi a livello più basso.

Una volta in possesso della Discovery, per caricavi il NetMF sono necessari pochi minuti (sfighe varie a parte), e sono necessari:

  • I file binari del porting che si possono scaricare da CodePlex
  • I driver USB per l’STM32F407, scaricabili sempre da CodePlex
  • Il software ST-Link scaricabile dal sito ST
  • Un cavo MiniUSB ed un MicroUSB
  • Il Net Micro Framework 4.2 SDK con relativi tools

Procedere così:

  • Installare l’ST-LINK
  • Scaricare i binari ed il driver usb e scompattarli
  • Collegare il cavo MiniUSB alla Discovery ed installare i driver prendendoli dalla cartella dell’ST-LINK
  • Aprire ST-LINK connettere la Discovery e programmare il file tinybooter.hex nel micro target.

  • Premere il pulsante NERO sulla Discovery, quindi collegate il cavo microUSB, fornendo il percorso ai driver scaricati in precedenza da Codeplex.

Piccolo inciso. A questo punto può capitare che benché i driver funzionino correttamente, Windows non li carichi perché non sono Firmati. Se chi legge si trova in queste condizioni allora appartiene a quella categoria di persone che il Sistema Operativo giudica alla stregua di un virus, o peggio. Sappia dunque lo sfigato che non è possibile bypassare facilmente la cosa visto che non è possibile disabilitare l’opzione di caricamento per i soli driver firmati. Il workaround più semplice è quello di premere F8 alla partenza e disabilitare la cosa in quella sessione, cosa che personalmente trovo comoda come svitare ed avvitare il tappo della benzina tutte le volte prima di accendere il motore. Il workaround più serio è quello da overclockkaro per il quale si firmano i driver con una chiave provvisoria, si avvia il sistema in modalità di test e si ricaricano i driver. L’opzione è reversibile, si fa con un software free che è scaricabile da qui, e va usata a proprio rischio e pericolo. Ora… io personalmente lo uso senza problemi, ma non rispondo di eventuali danni che potessero verificarsi. A buon intenditor… Spero comunque, come ho già richiesto, che esca una versione dei driver FIRMATA. Comunque, se qualcuno si trova nelle condizioni di cui sopra, sappia che mi ci sono trovato anche io.

  • Una volta che i driver sono stati riconosciuti (con le buone o con le cattive) aprire il programma MFDeploy che si trova nei tools del NetMF, “pingare” la Discovery usando come canale di comunicazione l’USB, quindi scaricare ER_CONFIG ed ER_FLASH nella flash del micro.

  • A questo punto resettare, aprire Visual Studio e cominciare a lavorare sulla scheda come se fosse una normale applicazione.

Ovviamente occorre impostare in maniera opportuna il deploy dell’applicazione stessa.

Quindi, si può mandare in run e vedere come tutto funzioni

Stay tuned.

A presto con i primi esempi.

posted @ 03/07/2012 14:30 by Davide Bertolino

Un lustro da Microsoft MVP, rinnovato anche quest'anno

Il 1° luglio è da qualche anno una giornata speciale per me. Nel 2008 infatti fui nominato MVP per la prima volta e ogni primo luglio si attende la rinomina per i 12 mesi successivi.

Anche per quest'anno sono stato nominato MVP per Visual Basic e, sebbene sia ripetitivo, l'emozione e la felicità, ma anche l'orgoglio, per la nomina sono sempre gli stessi della prima volta

E' il 5° award consecutivo, sono uno dei più giovani rispetto a tanti amici più "anziani" per i quali nutro profonda stima, ma speriamo di non fermarci qui

I 12 mesi che precedono l'award sono sempre abbastanza intensi, c'è sempre qualcosa da ricordare. Questo è stato l'anno dell'uscita di Visual Studio LightSwitch Unleashed, il mio 5° libro e 2° in inglese; sono stato votato MVP Of The Year per Visual Basic per il terzo anno consecutivo, unico europeo per numero di nomine e permettetemi il lecito orgoglio per questo, con il ringraziamento a tutti coloro che lo hanno reso possibile.

Ho proseguito l'attività di speaker in conferenze importanti come la WPC, ho avuto l'onore di re-incontrare S. Somasegar, ho pubblicato un po' di app per Windows Phone, sono entrato nella Hall of Fame delle app per Windows 8.. e ho iniziato a scrivere Visual Basic 2012 Unleashed.

Insomma non c'è tempo per annoiarsi

E nell'essere ripetitivo, mi piace sempre ricordare che la cosa più bella del programma MVP sono le persone. Grazie all'award ho potuto conoscere o rivedere persone di ogni parte del mondo, condividere la loro amicizia, fare delle esperienze che altrimenti non avrei mai potuto fare. Ho potuto visitare gli States, andare a Redmond e conoscere un sacco di Product Group, stringere dei legami che vanno oltre le email di tipo tecnico.

Il mio più sincero e profondo ringraziamento a Microsoft per aver cambiato in meglio la mia vita, a tutte le persone delle community con cui condividiamo conoscenza e voglia di crescere, all'inimitabile Alessandro Teglia per la passione con cui svolge il suo lavoro di MVP Lead e a tutti coloro che continuano a sostenermi anche con un semplice "grazie".

Da ultimo voglio concludere facendo le mie congratulazioni a Laura La Manna, nuova MVP per Visual C# e unica italiana di questa tornata. Laura ha dimostrato di avere una grande passione e questo è l'unico motore che deve motivare gli MVP in carica e coloro che ambiscono a diventarlo

Ancora un grazie di cuore a tutti, prometto che farò un brindisi anche per voi

Alessandro

posted @ 01/07/2012 23:22 by Alessandro Del Sole

Distribuzione per Windows Installer con Visual Studio 2012

Visual Studio 2012 segna un importante punto di rottura col passato per quanto riguarda la distribuzione di applicazioni desktop .NET sfruttando Windows Installer.

Infatti, sin dalla prima versione di Visual Studio .NET e fino a Visual Studio 2010 erano disponibili i Setup Projects che permettevano di creare dei pacchetti di installazione MSI. Tra l'altro questo è sempre stato un topic molto 'caldo', un mio vecchissimo articolo datato novembre 2002 e basato su VS .NET credo sia stato uno dei più letti di sempre tra i miei contributi, anche perché il meccanismo è rimasto sostanzialmente invariato attraverso le versioni, pur con qualche piccola modifica.

In Visual Studio 2012 spariscono i Setup Projects. Già in Visual Studio 2010 si capiva cosa stava succedendo, perché oltre ai progetti di distribuzione per la prima volta si trova la presenza di un installer di terze parti, ossia InstallShield Limited Edition.

In Visual Studio 2012 quindi InstallShield LE prende definitivamente il posto dei progetti di distribuzione. Anche nell'attuale stato di Release Candidate si possono fare dei test. Innanzitutto bisogna scaricare InstallShield. Nella finestra New Project si va in Other Project Types e poi si seleziona Setup and Deployment:

Mentre in passato a questo punto avremmo trovato i progetti di distribuzione, ora troviamo un collegamento che ci permette di abilitare InstallShield. Al clic verrà aperta la pagina della società Flexera, che vende InstallShield, all'interno della quale dovremo registrarci per ottenere il link per scaricare la Limited Edition e il serial number per attivare il prodotto.

Una volta scaricato e installato InstallShield LE, troveremo una nuova voce chiamata InstallShield nell'elenco dei tipi di progetto. Alla creazione del primo setup project ci verrà chiesto di inserire il serial number che ci è stato inviato via email.

Successivamente all'attivazione, e comunque alla creazione di un nuovo progetto, Visual Studio 2012 mostra la schermata iniziale chiamata Project Assistant e un menu specifico chiamato InstallShield LE:

Questo menu contiene un comando molto comodo per l'importazione di progetti Windows Installer esistenti dalle versioni precedenti di Visual Studio. Nel Project Assistant è possibile specificare tutte le informazioni relative al pacchetto e ai file che costituiscono l'installazione, oltre ovviamente a collegamenti, interazione col registro, e tutte quelle altre caratteristiche che normalmente contraddistinguono un'installazione basata su Windows Installer.

Piaccia o non piaccia, questa è la strada futura...

Alessandro

posted @ 29/06/2012 17:29 by Alessandro Del Sole

LightSwitch: un po' di risorse sul client HTML

Per coloro che sviluppano applicazioni business con Visual Studio LightSwitch il rilascio della prima preview del client HTML 5/JavaScript è sicuramente la novità più importante dell'ultimo decennio

Abbiamo iniziato a parlarne su questo blog e proseguiremo nei giorni prossimi, nel frattempo vi voglio dare un insieme di risorse sul client HTML che vi saranno utili anche quando uscirà la versione definitiva.

Non dimenticate poi il forum MSDN dedicato in modo specifico al client HTML e il Developer Center a quest'ultimo dedicato, disponibile qui.

Vi ricordo che allo stato attuale il client HTML è disponibile solo per finalità di test e la documentazione allegata al download vi spiega per filo e per segno cosa potete o non potete fare.

Alessandro

posted @ 28/06/2012 15:26 by Alessandro Del Sole

Nuovo training kit per Windows Azure

L'amico Vito Lorusso ci informa, tramite il blog di MSDN Italia, che è disponibile un nuovo training kit per Windows Azure che include materiale anche relativo alle nuove funzionalità come i Web Sites, le Virtual Machines, le Virtual Network.

Più in particolare il training kit contiene:

  • 12 nuovi hands-on labs per le Windows Azure Virtual Machines
  • 11 nuovi hands-on labs per i Windows Azure Web Sites
  • 2 nuovi hands-on labs che dimostrano come utilizzare Windows Azure con le applicazioni Metro-style di Windows 8
  • Nuovi hands-on labs per Node.js e PHP per chi sviluppa su Mac OS X.
  • Contenuti aggiornati per le ultime versioni dell'SDK e dei tool per Windows Azure, nonché del nuovo Windows Azure Management Portal
  • Nuove presentazioni e aggiornamenti di quelle già presenti nei precedenti Training Kit

Post originale di Vito qui, download del training kit qua.

Alessandro

posted @ 28/06/2012 15:17 by Alessandro Del Sole

Una mia intervista su LightSwitch, tradotta in italiano

Su LightSwitch Tips & Tricks, l'altra nostra community, abbiamo pubblicato la traduzione autorizzata in italiano di un'intervista che il sito InfoQ ha voluto farmi in merito a Visual Studio LightSwitch, nella quale parliamo di cosa sia, a chi è rivolto, cosa ci si può aspettare, cosa ci si può fare.

Se avete voglia di leggerla la trovate qui, dovete però registrarvi al sito. Quella originale in inglese invece si trova qui.

Alessandro

posted @ 28/06/2012 15:12 by Alessandro Del Sole

LightSwitch: creare un client HTML - prima parte

Da ieri è disponibile il tanto atteso aggiornamento per Visual Studio 2012 RC che permette di creare applicazioni LightSwitch che generino un client HTML 5+JavaScript; questa possibilità, come sapete, permette a qualunque tipo di device che abbia un browser Web di utilizzare le vostre applicazioni (quindi tablet PC, iPad, iPhone, Windows Phone, Android, etc).

Vediamo come creare un semplice client HTML 5 per un'applicazione LightSwitch che, per brevità, avrà una sola tabella. Innanzitutto creiamo un nuovo progetto in LightSwitch con VS 2012 (il client HTML non è disponibile per LightSwitch v1).

Come vedete, già la finestra New Project cambia:

Infatti è possibile scegliere il consueto template per l'applicazione LightSwitch classica, più un template per un'applicazione con il solo client HTML. In realtà la vera potenza sta nel fatto che si può creare un'applicazione classica e aggiungere un client HTML, cosa che faremo in questo post, in modo da avere più client per la stessa fonte dati, che è lo scenario ideale.

Partiamo da una tabella chiamata Contact, che fa anche uso di qualche business type:

 Noterete una novità in Solution Explorer. La soluzione infatti ora si divide in:

  • Server: la parte che contiene i dati e, dietro le scene, i servizi WCF che li espongono all'esterno
  • Client: la parte che contiene il client Silverlight a cui siamo già abituati

Questo ha come conseguenza che anche la gestione delle proprietà di progetto cambia, ma lo vedremo al momento opportuno. Facciamo click destro sul nome del progetto in Solution Explorer e selezioniamo Add Client.

La finestra di dialogo Add Client presenterà le possibilità offerte, quindi per ora il solo client HTML, e attenderà la specifica del nome del progetto:

A questo punto LightSwitch creerà in Solution Explorer un altro nodo di tipo client, chiamato col nome specificato in quest'ultima finestra, proprio a testimoniare la disponibilità di più client. Poiché la sorgente dati rimane la stessa, nulla dobbiamo fare su quest'ultima e possiamo passare direttamente ad aggiungere gli screen.

Obbligatoriamente un client HTML deve avere uno screen chiamato Home e che sia di tipo Browse Data Screen, un template che permette di elencare il contenuto di una tabella. Quindi, tasto destro sul nuovo elemento client generato in Solution Explorer, quindi Add Screen:

I template disponibili sono 3:

  • Browse Data Screen; permette di elencare il contenuto di una tabella o di una query
  • View Details Screen; permette di visualizzare un'entità e i suoi dettagli
  • Add/Edit Details Screen; permette di aggiungere o modificare un'entità

Rispettiamo i requisiti e aggiungiamo l'Home screen richiesto, che comparirà in Solution Explorer e che sarà possibile modificare nel consueto Screen Designer, tenendo bene a mente che sono disponibili una serie di controlli utente in pura produzione HTML.

E' sufficiente premere F5 per avviare il nostro client HTML:

Come vedete è tutto HTML 5 + JavaScript! Quando l'applicazione è in debug, potrete anche notare in Solution Explorer la presenza di una serie di elementi jQuery e di file .js, inoltre potrete osservare che, mentre si interagisce con la pagina, Visual Studio mostra il codice HTML generato.

Inoltre, sia in questo ma anche negli altri screen, è abbastanza evidente come il layout sia stato progettato per essere utilizzato su dispositivi touch. Questo risuona anche nella terminologia di alcuni elementi. Ad esempio, bisogna ora dire a LightSwitch cosa fare quando un utente clicca (o tocca) un contatto nell'elenco. Quindi bisogna far si che ci sia uno screen dei dettagli dell'entità selezionata. In primo luogo aggiungiamo un nuovo screen di tipo View Details che punti alla tabella Contacts, seguendo le consuete modalità.

Fatto questo, apriamo lo Screen Designer per l'Home screen, clicchiamo sul controllo List e nella finestra delle Proprietà individuiamo e clicchiamo la voce chiamata Item Tap. Già il solo nome ci rievoca dispositivi touch screen.

A questo punto dovremo specificare quale metodo invocare al tocco dell'elemento:

E' possibile creare metodi nuovi o usarne uno esistente, come ad esempio nel nostro caso ShowViewContactDetail che aprirà lo screen creato poc'anzi. E' necessario specificare l'oggetto da aprire nello screen, quindi l'elemento correntemente selezionato nella lista. Nell'apposita casella di testo, digitando il nome delle entità una sorta di IntelliSense ci aiuterà nel selezionare il dato di interesse.

A questo punto riavviamo il client:

Magicamente toccando il nome di un contatto si verrà rediretti ai suoi dettagli. Notate la presenza di un pulsante in alto a sinistra che permette di tornare indietro.

Se avete voglia di smanettare un pochino, ma più semplicemente di leggere la documentazione a corredo della macchina virtuale, potrete fare un deploy di test e aprire l'applicazione da un tablet o dispositivo portatile.

In questo post abbiamo visto solo un assaggio, parleremo poi di come aggiungere e modificare entità ma anche di come ritoccare il layout dell'applicazione.

Vi ricordo che il download del package sarà disponibile al pubblico a partire da giovedì 28 giugno 2012, mentre per ora è disponibile agli abbonati MSDN.

Gran bel lavoro, Team di LightSwitch!

Alessandro

posted @ 27/06/2012 21:54 by Alessandro Del Sole

LightSwitch: il client HTML è finalmente disponibile!

Da poche ore è finalmente disponibile per il download la preview del client HTML per Visual Studio LightSwitch in Visual Studio 2012, attualmente in release candidate.

Il download sarà disponibile al pubblico a partire da giovedì 28 giugno 2012, ma lo è già per gli abbonati MSDN. In questo blog post del Team di LightSwitch è disponibile il link per il download e una descrizione.

Fate attenzione: si tratta di un download gigantesco, circa 5 giga, che permetteranno il setup di un hard disk virtuale in cui c'è l'ambiente necessario per il test.

Nei giorni prossimi ovviamente parleremo di questa nuova incredibile opportunità che consente di espandere le applicazioni LightSwitch a scenari client come quelli mobili.

Alessandro

posted @ 27/06/2012 03:06 by Alessandro Del Sole

Anteprima del nuovo sito Visual Basic Tips &amp; Tricks

E' raggiungibile on line l'anteprima del nuovo sito Visual Basic Tips & Tricks.

http://beta.visual-basic.it/home.aspx

Questa nuova versione del sito rappresenta un importante passo in avanti della nostra community, con cambiamenti sia di forma, cercando di creare un layout grafico il più possibile gradevole e vicino alle tendenze estetiche del momento, che di sostanza, riorganizzando gran parte dei nostri contenuti per consentirne una più facile fruizione.

Per accedere al sito si presentano le STESSE credenziali (username e password) utilizzate su VBT&T,
ma la password va digitata tutta in caratteri MINUSCOLI.
Se la password non venisse accettata si deve procedere con l'opzione 'Ho dimenticato la password' per ricevere la nuova password generata in automatico dal portale.

Questa versione del sito *NON E'* completamente sincronizzata con la versione on line e tutti i servizi disponibili (come Forum, gestione dell'account, ecc...) sono ancora sperimentali e provvisori; verranno stabilmente sincronizzati al momento del lancio definitivo.

Potete provare a navigare il sito e a usare i forum, ma tutte le informazioni inserite saranno eliminate alla fine del periodo di prova.
Tutte le segnalazioni di carattere tecnico o feedback sul sito potete inviarle al seguente indirizzo:

betadnn [at] visual-basic.it

Buona navigazione, e fateci sapere!
----------------------------------
Il Team di Visual Basic Tips & Tricks

posted @ 26/06/2012 14:08 by Diego Cattaruzza

Usare Visual Studio per creare apps 'anche' per Apple e Android

Scott Guthrie ha appena 'twittato' che Red Gate rilascia una interessante estensione per Visual Studio: Nomad (http://www.vsnomad.com). Una novità davvero interessante. Usare il miglior IDE in assoluto per produrre app funzionanti sulle varie piattaforme mobili.

posted @ 25/06/2012 22:08 by Diego Cattaruzza

Aggiornamenti dal mondo embedded

Avverto una strana frenesia nel mondo embedded che sembra che mi stia contagiando.

Spuntano come funghi nuove proposte, alcune delle quali veramente interessanti, di infrastrutture per lo sviluppo di nuovi prodotti.

La prima riguarda la piattaforma .NET MF, o meglio, il suo porting sul STM32MF4 ed il suo rilascio su Codeplex da parte di Oberon.

Questo l’indirizzo del porting dal quale si può effettuare il download.

La cosa mi riguarda in positivo per più motivi.

Per la prima volta, infatti, seguendo le indicazioni della community italiana su NETMF sono riuscito a portare al termine la compilazione del porting, e questo è positivo per i motivi che illustrerò dopo.

In seconda istanza l’STM32F40x è un prodotto abbastanza consolidato e venduto, pur non potendo definirsi come prodotto particolarmente innovativo (vedere ad esempio i chip della serie  LPC43XX, che sono DECISAMENTE più innovativi), costa intorno ai 12/13 euro per sample, ed è disponibile sia da RS Components che da Digikey.

In terza istanza tra le varie piattaforme supportate dal porting nativo  c’è la ST4Discovery, che da Mouser viene quotata meno di 20 euro, che ho provveduto ad ordinare. E questo rende il discorso un po’ più appetibile visto quanto costano le schede originali, tipo Netduino GO.

Quindi, visto che riesco a compilare il porting, che la CPU è discretamente economica e saldabile, come il resto della componentistica, che far stampare una serie di 10/15 schede in 4 strati dai cinesi costa meno di 250 euro, e che può essere interessante avere una schedina con NetMF a bordo (che comunque posso riciclare nel caso mi servano prestazioni) tenterò questo esperimento, ed al costo di 5 o 6 Netduino GO spero di ritrovarmi con 10/15 schede in range di temperatura industriale montate con tutta la periferia che mi serve.

Ovviamente la scheda NON SARA’ una DUINO LIKE, e neanche una Gadgeteer (o come stracaspita si chiama).

Tralasciando la parte GIOCATTOLI, nell’autunno sperimenterò sicuramente almeno una architettura più performante, anche se sono ancora indeciso tra un chip più standard basato su core Arm926 della serie iMX23 prodotto da Freescale o una cineseria pura che si chiama A13, basata su Cortex A8. In entrambi i casi il sistema operativo target non sarà Microsoft, ma più probabilmente Android, e questo per OVVI motivi.

posted @ 22/06/2012 14:25 by Davide Bertolino

Nuovi video tutorial per CyberEasyManager

Guarda i video di CyberEasyManager il gestionale portatile su YouTube:
Download, installazione e primo avvio (2:28 min)
Panoramica veloce (4:30 min)

Ricordo il sito ufficiale:
www.cybereasymanager.it

e la disponibilità in versione completamente gratuita perfettamente utilizzabile senza limiti di tempo.

posted @ 21/06/2012 00:15 by Sergio Pappalardo

Tablet Windows &lsquo;Surface&rsquo; &egrave; arrivato!

Una immagine che vale più di 1000 parole … Finamente svelato Surface il Tablet Windows!

Abbiamo atteso per tanto tempo ma ora è una realtà!

Grande notizia è la disponibilità del device in due versione una con processore ARM e WinRT ed una, udite udite, con processore Intel e Windows 8 Pro a bordo!

Ecco le specifiche delle due versioni che saranno rilasciate

 

Il sito di riferimento per vedere immagini, video, specifiche del prodotto è quello ufficiale Microsoft Surface

Renato Marzaro

posted @ 19/06/2012 12:13 by Renato Marzaro

Kinect for Windows SDK 1.5.1

Come annunciato da Rob Relyea Program Manager, Kinect for Windows in questo post sul suo blog.

Kinect for Windows: Developer Toolkit Update (v1.5.1)

E’ da oggi disponibile l’aggiornamento 1.5.1 all’SDK di Kinect For  Windows SDK 1.5

NON ci sono novità esclatanti ma alcuni importanti BigFix e migliorie dal punto di vista performance

Changes in Developer Toolkit 1.5.1

Renato Marzaro

posted @ 19/06/2012 02:10 by Renato Marzaro

Simulazione di finali di campionato mondiale rivisitata

Simulazione di finali di campionato mondiale rivisitata (REDAZIONE IN CANTIERE!)

Questo programmino doveva servire a compiere previsioni relative al campionato di calcio europeo, ma poi mi sono reso conto che tale agone prevede otto e non sedici squadre finaliste. Pazienza, tanto si tratta tutto sommato di un divertissement, con mire soprattutto didattiche. Chi ne ha voglia può sempre adattare questo modello, dimezzando le text box e inserendo valutazioni opportune sul valore delle concorrenti. Sto parlando di rivisitazione, in quanto l’idea temporibus illis nacque su un foglio di Lavoro Excel poi è stata cucinata in salsa .NET (su questo blog dovrebbe esserci qualcosa…).

Questa implementazione è in WPF, sfruttando per l’ennesima volta una Grid, ma in modo alquanto originale, dato che le sedici quadre finaliste, rappresentate con altrettante TextBox, vengono spostate “materialmente” nelle varie celle, oscurando lo sfondo di quelle man mano eliminate. Le figure seguenti di cui fornisco per dannata fretta! solo i link da cui scaricarle mostrano in modo, spero, eloquente i vari passaggi dovuti a successivi clic sul pulsante Avanti.

http://www.giannigiaccaglini.it/download/FigCampionMond-01.jpg

http://www.giannigiaccaglini.it/download/FigCampionMond-02.jpg

http://www.giannigiaccaglini.it/download/FigCampionMond-03.jpg

A titolo di repetita iuvant, viene riprodotto passo dopo passo il noto schema piramidale che, di solito e come in precedenti miei modelli, prevede caselle ridotte da 16 a 8 a 4 a 2 fino a quella del campione. Nel nostro caso si parte con la posizione iniziale di tutte le concorrenti affiancate, a sinistra, dai rispettivi voti. La seconda figura mostra la situazione dopo due clic su Avanti, in cui ITALIA ha eliminato la Squadra2, che vinse sulla Squadra1 nelle eliminatorie, ove invece l’Italia prevalse sulla Squadra3.

In breve tutte le squadre che passano un turno sono evidenziate in blu (Acquamarine per l’esattezza), mentre quelle eliminate assumono il grigio colore dei perdenti. La Figura 3 esibisce una possibile conclusione, che però è aleatoria in quanto si basa su un fattore random (v. codice VB più avanti) oltre che sulle diverse valutazioni (riprese da esperti, almeno si spera), per tener conto della natura appunto aleatoria delle umane vicende, eventi sportivi inclusi.

XAM

Per la fretta mi limito a segnalare che le TextBox relative alle votazioni hanno nomi Voto1, Voto2, fino a Voto16 mentre per quelle relative alle concorrenti si hanno Squadra1, Squadra2, ..., Squadra16. NON fornisco queste righe dichiarative, che gl'’interessati non  avranno difficoltà a riprodurre, magari utilmente sfruttando stili opportuni per ottenere un aspetto meno spartano di quello qui proposto (frutto della pigrizia e idiosincrasia di chi scrive verso gli orpelli? Certo, ma anche della consapevolezza che maggiori dettagli avrebbero dilatato l’XAML).

posted @ 18/06/2012 21:33 by Gianni Giaccaglini

LightSwitch: in arrivo il client HTML 5!

Oggi Jason Zander ha annunciato, al TechEd North America, che tra poco tempo sarà possibile creare client HTML 5 in LightSwitch, con Visual Studio 2012!

In sostanza, oltre al classico progetto LightSwitch, sarà possibile aggiungere alla solution un progetto per creare un'applicazione basata su HTML 5/JavaScript che potrà accedere alle sorgenti dati LightSwitch, affiancando il client Silverlight.

Questa è una svolta epocale, dal momento che potete immaginare da soli le conseguenze: facilità di sviluppo client per dispositivi mobili.

Per darvi un'idea di cosa sia possibile, ecco un'applicazione LightSwitch in azione su un iPad:

Per i più smanettoni è possibile modificare il layout con JavaScript:

L'esperienza di sviluppo in Visual Studio 2012 è sempre semplificata e l'approccio è il medesimo, semplicemente ci sarà un Add Client in più:

Nel blog del Team c'è un post molto dettagliato che parla della cosa (non ancora disponibile un pack per il download ma si spera presto).

E' stata una faticaccia non poter dire nulla per parecchio tempo!

Attendiamo con ansia il download!

Alessandro

posted @ 12/06/2012 03:55 by Alessandro Del Sole

Visual Studio 2012RC Virtual Machine pronta per sperimentare

 

Con l’annunciata disponibilità di Visual Studio 2012 RC è stata aggiornata anche la Virtual Machine messa a disposizione da Microsoft per sperimentare da subito il nuovo sistema di sviluppo senza dover aggiornare la propria macchina di produzione o comunque senza doversi creare una propria Virtual Machine ad hoc.

La Virtual Machine contiene tutto quanto vi può essere utile per testare il nuovo ambiente di sviluppo :

  • Microsoft Windows Server 2008 R2 Standard Edition
  • Microsoft SQL Server 2008 R2
  • Microsoft Visual Studio Ultimate 2012 RC
  • Microsoft Visual Studio Team Foundation Server 2012 RC
  • Microsoft SharePoint Foundation 2010
  • Microsoft Project 2010
  • Microsoft Office Professional 2010 (Word, PowerPoint, Excel, Outlook)
  • Sample users and data required to support hands-on-lab scripts which accompany this download and exercise 18 ALM scenarios, including 7 new capabilities from Visual Studio 2012 and 11 capabilities which were introduced in the Visual Studio 2010 release

Potete leggere ulteriori particolari e scaricare la VM a partire da questo post :

Visual Studio 2012 Application Lifecycle Management Virtual Machine and Hands-on-Labs / Demo Scripts

Renato Marzaro

posted @ 11/06/2012 15:11 by Renato Marzaro

CyberEasyManager 2 disponibile

E' con grande soddisfazione che finalmente posso annunciare l'uscita della seconda versione di CyberEasyManager 2.0, il gestionale portatile.

Sei un commerciante? Sei uno sviluppatore con un parco clienti? Vendi tramite eBay? Hai un negozio nella tua città? Gestisci un'azienda, un'impresa o un qualsiasi esercizio commerciale? CyberEasyManager sarà il tuo assistente personale, e non ti lascerà mai solo!

 

Ecco cosa ti offrirà:

  • gestione contatti/clienti grazie a una dettagliata anagrafica
  • gestione calendario con appuntamenti, eventi, ricorrenze e scadenze
  • allarme all'avvicinarsi di un appuntamento
  • agenda del giorno all'avvio e dopo un periodo di tempo predefinito
  • gestione delle attività, progetti e cose da fare
  • resoconto degli appuntamenti per ciascun cliente
  • gestione prodotti venduti e servizi elargiti a ciascun cliente
  • creazione e stampa fatture, anche in PDF
  • resoconto spese per ciascun cliente
  • gestione magazzino prodotti
  • gestione budget, con inserimento automatico dei ricavi generati dai clienti
  • report, statistiche e grafici
  • inserimento note visualizzabili anche sul desktop di Windows come post-it

Questo è molto altro sarà possibile grazie a CyberEasyManager, il tuo assistente portatile, sempre con te.
http://www.cybereasymanager.it
http://www.gestionaleportatile.com

Da oggi c’è anche una pagina Facebook ufficiale:
www.facebook.com/CyberEasyManager.

posted @ 10/06/2012 07:09 by Sergio Pappalardo

.NET 4.5 = 4.0.30319 (e il project round-tripping)

Fate un esperimento: provate a installare .NET Framework 4.5 su una macchina su cui sia già presente il Fx 4.0.

Al termine dell'installazione andate a curiosare nella solita cartella C:\Windows\Microsoft.NET\Framework. Vi accorgerete che, oltre all'elenco delle solite versioni del Framework, non ce n'è una nuova per il Framework 4.5.

Che significa? Semplicemente che il Framework 4.5 ha ancora lo stesso numero di versione della 4.0, ossia 4.0.30319 (cambia in realtà il numero di build finale). E quindi, cosa significa?

Significa che il Framework 4.5 è, a livello di organizzazione, un aggiornamento della 4.0. Quest'ultima viene sovrascritta (se presente) con assembly aggiornati, oltre ai nuovi, che apportano anche tutte le novità architetturali.

Qual è la conseguenza di questo? La conseguenza è che se apro in VS 2012 un progetto fatto con VS 2010 non ci sarà alcun aggiornamento, ragion per cui potrò aprire lo stesso progetto ancora in VS 2010 senza problemi di sorta (ovviamente fin tanto che non faccio uso di caratteristiche tipiche di .NET 4.5).

Questa possibilità è nota come project round-tripping e mi sembra in effetti una bella mossa!

Ovviamente ci sono delle eccezioni dipendenti dalla tecnologia, in questo blog post di Zain Naboulsi potete trovare dettagli sulle citate eccezioni.

Alessandro

posted @ 09/06/2012 15:51 by Alessandro Del Sole

Novità in LightSwitch nella RC di Visual Studio 2012

Anche Visual Studio LightSwitch riceve qualche miglioramento introdotto dalla Release Candidate di Visual Studio 2012.

Ecco l'elenco:

  • la shell Cosmopolitan, di cui parlammo in questo post, è ora la selezione di default. E' ovviamente possibile selezionare ancora la shell Office nelle proprietà del progetto.
  • Il logo dell'applicazione viene ora mostrato anche nella maschera di login nelle applicazioni con autenticazione Forms. Molto richiesto
  • Pubblicazione su Windows Azure semplificata. Al riguardo il Team di LightSwitch ha pubblicato questo post.
  • miglioramenti generali alle performance dei designer e nel caricamento dei dati lato server.

E ora aspettiamo di vedere cosa ci riservano per la RTM

Alessandro

posted @ 09/06/2012 15:45 by Alessandro Del Sole

Visual Studio 2012 Express for Windows Desktop: ci sarà!

Come annunciato nel blog di Visual Studio, ci sarà anche un'edizione Express di Visual Studio 2012 per lo sviluppo Windows desktop, come già avveniva per le precedenti edizioni.

In questo modo non ci sarà più il solo sviluppo Metro per Windows 8, ma anche i cari WPF, Win Forms, Console.

Come da grande richiesta

Alessandro

posted @ 09/06/2012 15:41 by Alessandro Del Sole

LightSwitch 2012: pubblicare i soli servizi

Come sapete, la nuova versione di Visual Studio LightSwitch offre il supporto per i servizi OData; questi possono essere consumati ma, cosa ancor più importante, le origini dati LightSwitch sono anche automaticamente esportate come servizi OData.

Con il rilascio della RC di VS 2012 avvenuto pochi giorni fa, c'è stata una piacevole aggiunta alle opzioni di pubblicazione. In sostanza, è ora possibile decidere di pubblicare i soli servizi dell'applicazione LightSwitch, quindi anche senza il client ad interfaccia grafica.

Questo è fenomenale, perché per creare i miei servizi OData posso usare LightSwitch con tutte le facilitazioni del caso, e pubblicarli senza impazzire grazie al comodissimo Wizard.

Quello che cambia è semplicemente la selezione del tipo di applicazione in fase di pubblicazione:

Al termine della pubblicazione potrò quindi invocare i miei servizi OData da altre applicazioni (es. http://MyServer/MyApp/ApplicationData.svc), ma senza la necessità di avere per forza un client LightSwitch/Silverlight.

Bello e comodo.

Alessandro

posted @ 04/06/2012 15:49 by Alessandro Del Sole

Nasce DotNetIsland, user group per la Sardegna

E' con piacere che vi segnalo la nascita di un nuovo User Group con focus sulle tecnologie .NET, chiamato DotNetIsland e che ha base in Sardegna.

Fortemente voluto dall'amico Francesco Diaz di Microsoft, il quale con altri amici sta facendo un ottimo lavoro, questa realtà locale vuole essere un punto di aggregazione per gli amici sardi, che non sempre vengono raggiunti da eventi o comunità.

Un grande in bocca al lupo!

Alessandro

posted @ 04/06/2012 15:37 by Alessandro Del Sole

Windows8 senza Touch

Se state utilizzando Windows8 Release Preview e non avete un Monitor Touch Screen, o preferite utilizzare la tastiera, allora questo articolo vi potrebbe essere utile

Windows 8 tips for non-touch users

Nell’articolo sono riportati gli shortcut da tastiera per accedere alla funzioi di uso più frequente

 

E, se non avete ancora scaricato ed installato Windows8 Release Preview, vi conglio di farlo subito Open-mouthed smile

 

 

Renato Marzaro

posted @ 02/06/2012 18:17 by Renato Marzaro

Ottimizzazione delle prestazioni di applicazioni WPF

NAvigando in MSDN ho trovato questa interessante sezione chevorrei condividere con voi :

Ottimizzazione delle prestazioni di applicazioni WPF

Nell’articolo sono riportati tanti piccoli Tip che, senza grossi sforzi di riprogettazione, possono aiutare le Ns applicazioni WPF ad essere più performanti.

Renato Marzaro

posted @ 02/06/2012 18:08 by Renato Marzaro

Programmazione Asincrona in VB.NET a &quot;Visual Basic Tips &amp; Tricks Visual Studio 2012 Tour&quot;

Con vero piacere all’evento "Visual Basic Tips & Tricks Visual Studio 2012 Tour" del prossimo 06 ottobre a Reggio Emilia terrò una sessione sulla Programmazione Asincrona con Visual Studio 2012 e, nauralmente, Visual Basic .NET.

La Programamzione Asincrona rappresenta il futuro per le Ns applicazioni WinRT ma anche il presente per le applicazione DeskTop in Windows7. A tal proposito ricordo che è possibile utilizzare la Programmazione Asincrona anche con il Framework 4.0 (e non solo con il Framework 4.5 rilasciato con VS 2012)

Vi aspetto alla mia sessione e colgo l’occasione per segnalarvi altre due interessanti sessioni dello stesso evento

Visual Basic Tips & Tricks Visual Studio 2012 Tour

Renato Marzaro

posted @ 02/06/2012 17:58 by Renato Marzaro

Guida completa su Hadoop, per gestire Big Data

Una guida completa su Hadoop, da O’Reilly

Una premessa è d’obbligo. Difficile pensare che qualcuno non abbia ancora sentito parlare di Big Data, è il tema del giorno, impazza in tutti i convegni e sul Web. Per sommi capi, ricordo a ignari & immemori che si tratta del sempre più serio problema dell’aumento esponenziale di dati d’ogni tipo (si parla ormai, come unità di misura, di “petabyte” e oltre) dispersi nei più vari depositi aziendali o pubblici, su reti di ogni tipo, specie web. I guai dei Big Data non derivano solo dall’enormità delle moli, tant’è che vengono inquadrati secondo le famose tre V :

Volume (la quantità smisurata di elementi)

 • Varietà (la grande diversità delle fonti e dei formati)

Velocità (dell’accesso il più tempestivo possibile a quelli che interessano)

 Il punto da focalizzare è il secondo, che nasce dalla presenza, oltre alle classiche tabelle relazionali, di tabelle (diciamo così) meno rigide, le cosiddette No-SQL, cui si aggiungono testi anche liberi, spreadsheet e formati particolari (dati meteorologici e simili) e, last but not least, pagine Internet.

Per fortuna, da tempo ricercatori e produttori hanno escogitato algoritmi e tool mirati al trattamento dei Big Data. Fra questi il più noto e diffuso è Hadoop, ambiente di sviluppo open source di Apache. Per comprendere il motivo del suo successo basti dire che viene adottato fra gli altri da Google che lo utilizza soprattutto per le sue ricerche sullo sterminato mondo Web. Orbene per brevità sorvolo sulla leggenda vera che associa l’icona di Hadoop a un elefantino di pezza del pargolo del suo geniale autore Doug Cutting. La trovate facilmente con Google (ovvero... con Hadoop) nonché nel primo capitolo del testo che qui recensisco, osando segnalarlo a programmatori anche di medio calibro (ma audaci) come a chiunque voglia aggiornare la propria cultura informatica.

  Hadoop, the definitive Guide (terza edizione)

  di Tom White Pagine 686 Editore O’Reilly

  Prezzi: $49,99 (su carta) - $ 39,99 (ebook)

   www.oreilly.com

Prima di entrare in qualche dettaglio, voglio anticipare due conclusioni basilari:

• Il libro svela presto, chiarendolo piuttosto bene, MapReduce, il magico algoritmo del sullodato Cutting;

• Successivamente fornisce una varietà di esempi e snippet in linguaggio Java che mostrano come, una volta compreso il marchingegno di cui sopra, sia relativamente semplice ottenere concreti risultati, sia su proprie fonti di dati non gigantesche ma eterogenee anzichenò, sia su fonti di pubblico dominio.

Sempre a titolo di antipasto (a costo di suscitare la critica di privilegiare così la gente frettolosa) rivelo all’inclita e al volgo che l’idea base di MapReduce è un procedimento batch (ergo niente real-time, ma il contrario: va detto), che si estrinseca nell’impostazione a cura di un amministratore di opportuni Hadoop cluster e nello speciale filesystem distribuito HDFS (Hadoop Distributed File System) che consente di gestire grandi database eterogenei e distribuiti.

Il manuale, teorico e pratico e ricco di esempi con tanto di codice Java, il che non sarà un problema almeno per i più esperti che usano C#, illustra i vari modi d’impiego di Hadoop.

• Per creare building block per compressione, data integrity, serializzazione ( Avro incluso);

• redigere programmi MapReduce;

• progettare, e costruire e amministrare cluster Hadoop e/o far girare Hadoop sul cloud;

• caricare database relazionali in HDFS, col modulo Sqoop;

• elaborare big data con il linguaggio Pig;

• analizzare dataset con Hive, il sistema di data warehouse di Hadoop;

• utilizzare il modulo HBase per gestire dati strutturati e semi-strutturati (anche congiuntamente) e ZooKeeper per costruire sistemi distribuiti.

Illuminanti I numerosi studi di casi relativi a problemi d’ogni genere. Questa è la terza edizionedi un bestseller, aggiornata alle ultime novità di Hadoop, in primo luogo l’ultima versione della API MapReduce.

Due tre snippet a titolo d’esempio

Per dare un’idea, sia pure sommaria, del ricco contenuto del manuale riportiamo pari pari - e lasciando a chi legge ogni commento - alcune operazioni basilari del Filesystem Hadoop, una volta compiute le operazioni di configurazioni, su cui sorvoliamo allegramente per brevità. Si tratta di operazioni classiche, riscontrabili un po’ in tutti i file system, come lettura di file, creazione di directory, trasferimento di file, cancellazione di dati ed elencazione di directory.

Queste operazioni si digitano su una linea di comandi (del tutto analoga a quella di altri ambienti, come .NET per citarne solo uno). La sintassi prevede la premessa % hadoop fs, che invoca la shell del file system di Hadoop. Così % hadoop fs –help fornisce aiuto sulla sintassi e sul significato dei vari comandi.

Copia di un file dal filesystem locale in HDFS:

% hadoop fs -copyFromLocal input/docs/quangle.txt hdfs://localhost/user/tom/ quangle.txt

Il precedente esempio sfrutta il verbo copyFromLocal per copiare quangle.txt in /user/tom/quangle.txt dell’istanza HDFS che gira sul localhost. Rimandando al libro in esame per altri dettagli, riportiamo altri esempi analoghi:

% hadoop fs -copyFromLocal input/docs/quangle.txt /user/tom/quangle.txt
% hadoop fs -copyFromLocal input/docs/quangle.txt quangle.txt

La copia inversa si esprime così:

% hadoop fs -copyToLocal quangle.txt quangle.copy.txt

I capitoli più profondi coprono poi tematiche avanzate, che definiscono le possibilità analitiche di Hadoop (per statistiche, forecasting ecc.) ma ci fermiamo qui, sperando di aver fornito un’idea di come Hadoop sia, al tempo stesso, potente e (relativamente) amichevole.

http://shop.oreilly.com/product/0636920021773.do?sortby=publicationDate

 

posted @ 01/06/2012 22:31 by Gianni Giaccaglini

Windows 8 Release Preview disponibile

E' disponibile da ieri il nuovo rilascio di Windows 8, chiamato Release Preview, che possiamo considerare una Release Candidate.

Il percorso che il nuovo sistema operativo sta facendo procede spedito e la nuova preview, che precede in sostanza la versione definitiva, promette di essere molto interessante e più stabile della precedente beta.

Il download è pubblico e potete scaricare sia un Web installer che le immagini ISO. Nota interessante: sebbene la localizzazione italiana non sia ancora disponibile, selezionando l'italiano nei regional settings anche le app vengono localizzate. Carino

Potete scaricarla da qui.

Vi ricordo inoltre che, contestualmente alla RC di Windows 8, è stata rilasciata anche la Release Candidate di Visual Studio 2012, che potete trovare qui. Io la mia nottata sveglio l'ho già fatta

Alessandro

posted @ 01/06/2012 22:04 by Alessandro Del Sole

Disponibile Visual Studio 2012 RC e .NET Framework 4.5 RC

 

Visual Studio 2012 RC

Da oggi sono disponibili per tutti le Release Candidate di Visual Studio 2012 e di .NET Framework 4.5.
Naturalmente si possono scaricare tutte le edizioni previste comprese quelle Express. Questo il dettaglio:

 

Visual Studio 2012 RC

imageVisual Studio 2012 Professional RC

 

Visual Studio 2012 RC Express

Express for Web RCExpress for Windows 8 RC

 

Team Foundation Server 2012 RC

Team Foundation Server 2012 RCTeam Foundation Server 2012 Express RCTeam Explorer Everywhere for TFS RC

 

Gli abbonati MSDN posso scaricarli direttamente dal loro abbonamento.

Buon download a tutti Smile

posted @ 01/06/2012 03:33 by Antonio "tdj" Catucci

Nuovo look e nuova organizzazione per i blog MSDN

I blog MSDN si tingono di.. Metro

In particolare è stata pubblicata una pagina che aggrega le notizie provenienti dai blog per sviluppatori, suddividendo, inoltre, i vari blog per macro-categorie in base al target tecnologico (es. Visual Studio, linguaggi, Framework, piattaforme, ecc.).

Un piccolo esempio:

A me non dispiace, anche perché in un solo posto posso trovare tutti i blog di team di mio interesse.

Il link per raggiungere la pagina è questo.

Alessandro

posted @ 31/05/2012 21:56 by Alessandro Del Sole

Sviluppare Metro-style app per Windows 8 con Visual Basic - ottava parte

Proseguiamo la serie di post dedicati allo sviluppo di app Metro per Windows 8 con Visual Basic. Nella puntata precedente abbiamo descritto gli stati di sospensione e attivazione che vanno gestiti, in questa puntata invece parliamo del Search contract.

La ricerca in Windows 8 e Metro

Windows 8 offre il cosiddetto Search Charm, ossia una funzionalità di ricerca integrata nel sistema operativo in grado di cercare non solo elementi di sistema, ma anche all'interno delle app. Questo quindi è un altro modo con cui le app si integrano con Windows. Un esempio di ricerca è dato dalla seguente figura, che mostra come il search charm tiri fuori dei risultati da più punti come File, elenco App, impostazioni:

Ovviamente la ricerca è assolutamente personalizzabile in base all'app, notate però come sia buona norma offrire dei filtri ed è anche possibile mostrare dei suggerimenti da visualizzare man mano che l'utente digita nel campo di ricerca.

E' fondamentale evidenziare che il Search charm non è un plus. E' al contrario un obbligo da rispettare se la propria app deve implementare funzionalità di ricerca. In altre parole: non dovrai mai implementare il tuo motore di ricerca interno, dovrai bensì integrare l'app col search charm e con quello tirare fuori i risultati. Vediamo ora come sia facile farlo in Visual Basic.

Implementare il Search Contract nella propria app

Visual Studio 11 offre uno specifico modello di elemento per implementare con facilità la ricerca. Quindi ci basta selezionare Project, Add New Item. Nella dialog di aggiunta selezioniamo il template chiamato Search Contract:

Questa operazione aggiungerà al progetto una pagina che implementa:

  • lato XAML, uno scheletro di interfaccia per mostrare l'elenco dei risultati
  • lato codice, l'infrastruttura per la navigazione e una serie di porzioni di codice che rendono la pagina già funzionante, a cui va sostanzialmente aggiunto il solo codice che esegue le query

Posto che tutto è migliorabile e che in questo esempio il codice mi serve per spiegare le cose in modo semplice, supponiamo di voler visualizzare sia l'elenco completo dei risultati di ricerca sia un filtro che mostri l'elenco degli articoli pubblicati negli ultimi 30 giorni. Modifichiamo il metodo OnNavigatedTo, all'interno del quale è già visibile la definizione di filtri e contenitori dei risultati, che vanno ora popolati.

Ecco come lo definiamo:

    Protected Overrides Sub OnNavigatedTo(e As Navigation.NavigationEventArgs)
 
        ' Unpack the two values passed in the parameter object: query text and previous
        ' Window content
        Dim parameters = DirectCast(e.Parameter, Tuple(Of String, UIElement))
        Dim queryText = parameters.Item1
        Me._previousContent = parameters.Item2
 
        ' TODO: Application-specific searching logic.  The seach process is responsible for
        '       creating a list of user-selectable result categories:
        '
        '       filterList.Add(New Filter("<filter name>", <result count>))
        '
        '       Only the first filter, typically "All", should pass True as a third argument in
        '       order to start in an active state.  Results for the active filter are provided
        '       in Filter_SelectionChanged below.
 
        Me.query = From feed In App.DataSource.Feeds
                   From f1 In feed.Items
                   Where f1.Title.ToLower.Contains(queryText.ToLower) Or f1.Content.ToLower.Contains(queryText.ToLower) Or f1.Author.ToLower.Contains(queryText.ToLower)
                   Select f1
 
        Me.filteredQuery = From feed In App.DataSource.Feeds
                   From f1 In feed.Items
                   Where f1.Title.ToLower.Contains(queryText.ToLower) Or f1.Content.ToLower.Contains(queryText.ToLower) Or f1.Author.ToLower.Contains(queryText.ToLower)
                   Let minimumDate = Date.Today.AddDays(-30)
                   Where f1.PubDate < Date.Today AndAlso f1.PubDate > minimumDate
                   Select f1
 
        Dim filterList = New List(Of Filter)()
        filterList.Add(New Filter("All", query.Count, True))
        filterList.Add(New Filter("Last 30 Days", filteredQuery.Count))
 
        ' Communicate results through the view model
        Dim bindableProperties As New PropertySet()
        Me.DefaultViewModel("QueryText") = ChrW(&H201C) + queryText + ChrW(&H201D)
        Me.DefaultViewModel("CanGoBack") = Me._previousContent IsNot Nothing
        Me.DefaultViewModel("Filters") = filterList
        Me.DefaultViewModel("ShowFilters") = filterList.Count > 1
 
        Me.DefaultViewModel("Results") = New ObservableCollection(Of FeedItem)(query)
    End Sub

QueryText è una variabile che contiene la chiave di ricerca e viene recuperata dagli argomenti passati alla pagina. In base a questa variabile ho due query LINQ, la prima che mi tira fuori tutti i risultati, la seconda quelli filtrati.

La collezione di filtri è già definita di default e include l'aggiunta del filtro "all". Aggiungiamo poi il filtro personalizzato, avendo cura di passare il numero di elementi che verranno così mostrati in preview. Dobbiamo poi gestire la selezione del filtro da parte dell'utente, attraverso il gestore Filter_SelectionChanged:

    Protected Sub Filter_SelectionChanged(sender As Object, e As SelectionChangedEventArgs)
 
        ' Determine what filter was selected
        Dim selectedFilter = TryCast(e.AddedItems.FirstOrDefault(), Filter)
        If selectedFilter IsNot Nothing Then
 
            ' Mirror the results into the corresponding Filter object to allow the
            ' RadioButton representation used when not snapped to reflect the change
            selectedFilter.Active = True
 
            If selectedFilter.Name = "All" Then
                Me.DefaultViewModel("Results") = New ObservableCollection(Of FeedItem)(Me.query)
            Else
                Me.DefaultViewModel("Results") = New ObservableCollection(Of FeedItem)(Me.filteredQuery)
            End If
        End If

    End Sub

In modo piuttosto essenziale determiniamo il nome del filtro e, a seconda della selezione, lo assegnamo al ViewModel che rappresenta i risultati di ricerca attraverso l'istanza di una ObservableCollection che, come sapete, è idonea al data-binding con lo XAML. 

Come l'app interagisce con Windows

L'app interagisce col Search Charm allorquando andiamo a scrivere la seguente riga nel metodo OnSearchActivated della classe App:

    Protected Overrides Sub OnSearchActivated(ByVal e As Windows.ApplicationModel.Activation.SearchActivatedEventArgs)
        SearchResultsPage1.Activate(e.QueryText)
    End Sub

Questo metodo viene invocato quando l'app reagisce alla ricerca e invoca, a sua volta, il metodo Activate della pagina di ricerca alla quale passa la chiave di ricerca ricevuta da Windows.

Test della ricerca

Se a questo punto proviamo a lanciare l'app, possiamo invocare il Search charm e digitare una chiave di ricerca. Questa verrà recepita dall'applicazione che mostrerà i risultati completi e filtrati:

Tralasciando l'estetica della pagina di ricerca, che andrebbe certamente migliorare, questi sono i passaggi principali da eseguire per implementare la ricerca integrata con Windows.

Un possibile proseguimento è quello di aggiungere anche qui l'app bar con il pulsante che apre la pagina relativa all'elemento selezionato. Notate infine come la pagina implementi, di default, il pulsante per tornare indietro alla pagina precedente.

Conclusioni

Il Search charm contribuisce a creare applicazioni di qualità e implementarlo non è per nulla complesso. Nella prossima puntata andremo a correggere tutta una serie di errori fatti nei precedenti post, relativi alle guidelines della UI. Questo ci servirà (ed è servito a me in primis) a capire il perché di determinate cose, come vanno implementate correttamente e come porsi nell'ottica della certificazione.

Per tale ragione questa volta niente codice, che sarà disponibile la prossima volta con le migliorie necessarie

Alessandro

posted @ 29/05/2012 00:26 by Alessandro Del Sole

Nella Hall of Fame delle app per Windows 8!

Da qualche giorno ho l'onore di far parte della "Windows 8 App Hall of Fame" per essere stato tra i primi a sviluppare un'applicazione Metro style per il venturo sistema operativo di casa Microsoft, insieme ad altri bravissimi sviluppatori, alcuni dei quali giovanissimi.

L'app che ho sviluppato si chiama "I'm a VB" e probabilmente molti di voi hanno già conosciuto la versione per Windows Phone; in Windows 8 e Metro, avendo a disposizione molte più opportunità, l'app che ogni sviluppatore VB non può fare a meno di avere diventa non solo un modo per rimanere aggiornato con facilità ma anche un punto di contatto tra persone. E sarà disponibile quando lo Store aprirà anche in Italia

Nel frattempo, se volete anche voi far parte di questo prestigioso gruppo, sviluppate la vostra app Metro e poi segnalatela a MSDN Italia per le valutazioni successive.

Alessandro

posted @ 29/05/2012 23:40 by Alessandro Del Sole

Ricerca Beta Test per nuovo portale Visual Basic Tips &amp; Tricks

Finalmente, dopo una lunga attesa, il nuovo portale di Visual Basic Tips & Tricks sta per essere messo ONLIne!

Pensando ad un rilascio pubblico del portale intorno alla metà di luglio abbiamo deciso di mettere a disposizione, in esclusiva per i soci della Ns Associazione Culturale, la versione preliminare del portale dal 18 giugno 2012 per una fase di Beta Testing.

L’opportunità è esclusiva e riserva ai soci della Ns Associazione Culturale se non sei ancora socio e vuoi partecipare alla fase di Beta Testing del nuovo sito … che aspetti a diventare Socio?

Eccovi alcuni ScreenShot ‘rubati’ dal nuovo sito …

 

 

 

Renato Marzaro

posted @ 26/05/2012 04:35 by Renato Marzaro

EF Code First: Table Per Hierarchy

Entity Framework Code First consente di mappare le entità applicando diverse strategie di modellazione esattamente come già è possibile fare con un approccio Database First o Model First.

La Table Per Hierarchy (TPH), ad esempio, si applica quando vogliamo mappare una tabella del database su più entità sulla base di un campo discriminante che permette di determinare il tipo di ciascuna entità. Considerandolo da un punto di vista Code First, significa mappare più entità in una unica tabella del database utilizzando un campo discriminate per determinare ciascuna entità.

Supponiamo di avere le seguenti entità con relativo Context:

 

Public MustInherit Class Person
     Public Property Id As Integer
     Public Property FirstName As String
     Public Property LastName As String
End Class


Public Class Employee
     Inherits Person

End Class

Public Class Vendor
     Inherits Person

End Class

Public Class EFContext
     Inherits DbContext

    
Public Property People As DbSet(Of Person)
End 
Class

 

Banalmente abbiamo una classe astratta Person, che rappresenta un individuo, e due implementazioni concrete Employee e Vendor. La classe EFContext, invece, definisce solo il set People che rappresenta l’unica entità che vogliamo mappare nel database.

Se facciamo creare il database da Entity Framework Code First, il risultato è questo:

 

image

 

cioè viene creata una sola tabella People, appunto, che oltre ai campi definiti nella classe Person ha un campo in più chiamato Discriminator.
In pratica, Entity Framework Code First ha implementato automaticamente la strategia TPH (che è anche il comportamento di default) aggiungendo il campo discriminante che conterrà il tipo dell’entità a cui si riferisce.
In pratica il seguente codice:

 

 Dim e As New Employee With {.FirstName = "Antonio", .LastName = "Catucci"}

Using ctx As New EFContext
      ctx.People.Add(e)
      ctx.SaveChanges()
End 
Using

 

si traduce in:

 

image

 

Ma se volessimo decidere noi sia il nome del campo discriminate che il contenuto? Dobbiamo ricorrere all’uso delle Fluent API:

 

Public Class EFContext
     Inherits DbContext     

Public Property People As DbSet(Of Person)    

Protected Overrides Sub OnModelCreating(modelBuilder As DbModelBuilder)
        MyBase.OnModelCreating(modelBuilder)

         modelBuilder.Entity(Of Employee)() _
                    .Map(Sub(e) e.Requires("PersonType").HasValue("E") _
                     .HasColumnType("char").HasMaxLength(1).IsRequired()
 
        modelBuilder.Entity(Of Vendor)() _
             .Map(Function(v) v.Requires("PersonType").HasValue("V"))
     End 
Sub
End 
Class

 

L’extension method da usare è Map() e serve per specificare il nome del campo discriminante, attraverso il metodo Requires(), e il valore da assumere per l’entità a cui si riferisce, attraverso il metodo HasValue() (quest’ultimo accetta un tipo generico così da poter specificare, ad esempio, sia valori numerici che stringa).

Il risultato è il seguente:

image

 

Nel caso di valori alfanumerici, di default il tipo utilizzato è un nvarchar(128) che, però, è possibile modificare sempre con l’uso delle fluent api:

 

  modelBuilder.Entity(Of Employee)() _
                     .Map(Sub(e) e.Requires("PersonType").HasValue("E") _
                     .HasColumnType("char").HasMaxLength(1).IsRequired())

 

image

posted @ 25/05/2012 13:00 by Antonio "tdj" Catucci

Annunciate le edizioni di Visual Studio 11

Un paio di giorni fa Microsoft ha annunciato quali saranno le edizioni di Visual Studio 11, attualmente in beta, nel momento in cui il prodotto verrà definitivamente rilasciato.

Le edizioni saranno sostanzialmente note, ci saranno infatti le Express gratuite, la Professional, la Test Professional, la Premium, la Ultimate.

Approfondimenti specifici su ciascuna edizione possono essere trovati nei vari blog ufficiali, io vi segnalo questo post perché viene fatto un confronto un po' più carino.

Quello che di sicuro è interessante rilevare è che:

  • le edizioni Express non prevedono un ambiente per lo sviluppo di applicazioni desktop, per le quali si dovrà ricorrere ancora a Visual Studio 2010 Express. Infatti l'edizione di Visual Studio 11 Express per lo sviluppo su Windows è dedicata alle app Metro style
  • Visual Studio LightSwitch non sarà più disponibile come prodotto stand-alone, ma solo come parte delle edizioni superiori di Visual Studio 11.

Non chiedetemi se VS 2010 Express verrà aggiornato per supportare .NET Framework 4.5 nello sviluppo desktop, non lo so

Ulteriori informazioni possono essere trovate nel post che vi ho segnalato sopra.

Alessandro

posted @ 23/05/2012 20:24 by Alessandro Del Sole

Serie di Webcasts su Windows Embedded

Segnalo con piacere l’iniziativa del’amico Valter Minute [MVP Windows Embedded: Development] che vuole illustrarci le informazioni necessarie per portare le Ns applicazioni Desktop anche nel mondo Embedded.

Verrà mostrato come usando Windows Embedded Standard 7 (e, ovviamente, anche vNext basato su Win8 che per ora è in beta) sia possibile realizzare device embedded senza perdere tutta la "comodità" e le features dello sviluppo "tradizionale" su windows.

Durante i webcast verrà spiegato come integrare un'applicazione nel sistema operativo o, meglio, come "ritagliare" il sistema operativo in funzione delle esigenze di un'applicazione ... un po' un mix tra Windows e i mattoncini lego Smile

Il primo webcast farà da introduzione (parte teorica), gli altri tre saranno invece più pratici.

Per dettagli e partecipazione Windows Embedded for Application Developers

Renato Marzaro

posted @ 23/05/2012 03:28 by Renato Marzaro

Face Tracking SDK in Kinect For Windows 1.5

Una delle novità più interessanti del nuovo SDK 1.5 per Kinect for Windows è sicuramente l’integrazione con il Face Tracking SDK.

 

L'SDK Face Tracking, che fornisce in tempo reale informazioni 3D delle caratteristiche facciali, il tracciamento della posizione della testa, la posizione delle sopracciglia, la forma della bocca, ecc.

Il tutto, naturalmente, disponibile per le Ns applicazioni .NET.

 

Per approfondimenti vi segnalo :

Face Tracking SDK in Kinect For Windows 1.5

Kinect for Windows SDK 1.5 Face Tracking

Kinect for Windows SDK 1.5 - Face Tracking, Seated Skeletal Tracking, Kinect Studio, & More

Kinect for Windows: SDK and Runtime version 1.5 Released

Se poi volete approfondire il ‘dietro le quinte’ con un pò di teoria vi sonsiglio queste letture Active Apperance Model, Active AppearanceModels Revisited, AAM based Face Tracking with Temporal Matching and Face Segmentation and Iterative closest point

Renato Marzaro

posted @ 22/05/2012 15:12 by Renato Marzaro

Kinect for Windows SDK 1.5 e Kinect for Windows Developer Toolkit 1.5

Sono, finalmente Open-mouthed smile, disponibili per il Download

Kinect for Windows SDK

e

Kinect for Windows Developer Toolkit

Il primo comprende i driver per l’utilizzo su PC con Windows7, Windows 8 CP e Windows Embedded Standard 7

Il secondo, novità, esempi di codice, Kinect Studio, Face Tracking SDK, e molte altre risorse utili per i sviluppo di applicazioni basate su Kinect for Windows.

Le principali novità di questo rilascio sono

  • Identificazione punti (10 joint) utente anche quando questo è seduto
  • Velocizzata modalità ‘near range’ (sitanza fra sensore Kinect e utente 40cm) con identificazione parte superiore (se utente seduto) o Full (se utente in piedi)
  • <