Archive for maggio 2015

Installazione di Office 2016 e primo sguardo

Posted on 9 maggio 2015. Filed under: Senza categoria |

E’ da poco disponibile la Preview di Office 2016.

In questo articolo vedremo i passi per l’installazione e daremo uno primo sguardo alle novità più importanti.

Possiamo scaricare l’eseguibile da questo link: https://products.office.com/en-us/office-2016-preview

La versione disponibile mentre scriviamo questo articolo è la 16.0.3930.1008.

 

Una volta scaricato, lo lanciamo. La prima schermata che apparirà è questa:

image

 

Questo arancione già mi piace.

 

L’installazione poi continuerà in background.

image

 

 

image

 

 

Una volta finita l’installazione, troviamo il pacchetto nel menù Tutti i programmi.

Proviamo ad aprire Excel.

Dobbiamo attivare prima il prodotto:

image

 

Inseriremo un Product key, che troviamo in questo link:

https://products.office.com/en-us/office-2016-preview#howToGet

 

 

image

 

e concludiamo l’installazione.

 

image

 

 

Poi la solita finestra dei tipi di file

 

image

 

Ed ecco come si presenta Excel:

image

 

Vedete che nel Ribbon abbiamo delle schede nuove (sul pc c’è installato Dynamic NAV).

 

Una delle cose belle notate “al volo” è che può connettersi ai nostri progetti in TFS per avere la lista degli items aperti di un progetto, i bug etc etc.

 

image

 

Nei successivi articoli proveremo questa e altre nuove funzionalità. Non dimenticate di seguirci e mettere il blog fra i vostri preferiti e di dare uno sguardo a www.crystalweb.it

 

Articolo scritto da Piero Sbressa (@pieer11) e Carmelo La Monica, Microsoft Contributor (http://community.visual-basic.it/carmelolamonica/default.aspx)

Annunci
Leggi l'articolo intero | Make a Comment ( None so far )

Visual Studio 2015 RC

Posted on 3 maggio 2015. Filed under: Senza categoria |

Alla Build 2015, consueto appuntamento annuale dove Microsoft presenta le novità per gli sviluppatori, è stata annunciato il rilascio di Visual Studio 2015 RC. Noi l’abbiamo scaricata e installata.

Il link alla pagina per il download è questo: https://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs?CR_CC=200626829

 

Noi abbiamo scaricato la Enterprise e useremo questa.

Appena scaricata la ISO, la montiamo e lanciamo il setup.

La prima schermata che appare è questa:

image

Scegliamo l’installazione personalizzata per vedere le opzioni nascoste dall’installazione tipica.

 

Selezioniamo quindi tutte le opzioni e poi le proveremo.

 

image

 

La successiva schermata è questa:

 

image

 

Procediamo quindi all’installazione vera e propria.

image

 

E finalmente dopo diverse ore ha finito:

image

 

Riavviamo quindi il computer e proviamo subito qualcosa.

 

Prima di creare qualcosa di nuovo, c’è da dire che progetti creati con le CTP non sono compatibili.

Vediamo adesso un nuovo progetto Windows Phone Universal App.

 

image

 

Come possiamo vedere, non c’ è il template “Windows 10”, ma è diventato Windows –> Windows Universal, mentre il “vecchio” Universal App di Windows 8.1 è diventato “Windows 8”. C’ è stato insomma una rinomina dei vari Template.

Apriamo quindi il Windows (ex Windows 10):

image

 

Creiamo una Blank App.

E come già sappiamo ecco la nostra universal App su Windows 10

image

 

mentre su Windows Phone 10 (Emulatori).

 

Gravità    Codice    Descrizione    Progetto    File    Riga
Errore        Errore: DEP6100 : Durante la fase di avvio ‘Connessione al dispositivo ’48EC04AE-0256-4908-9837-E72AD2191057’. si è verificato il seguente errore imprevisto:
SmartDeviceException – Impossibile trovare il file specificato.    App1       

 

Come potete vedere non parte l’emulatore per Windows 10 for Mobile.

Ma non parte neanche sul dispositivo in quanto ottengo questo errore:

Gravità    Codice    Descrizione    Progetto    File    Riga
Errore        Errore: DEP0001 : Errore imprevisto: A Prerequisite for an install could not be satisfied. (Exception from HRESULT: 0x80073CFD)    App1       

 

Abbiamo mandato la segnalazione su Microsoft Connect e vi aggiorneremo su come risolverli in un successivo articolo.

 

Articolo scritto da Piero Sbressa (www.crystalweb.it) e Carmelo La Monica, Microsoft Contributor (http://community.visual-basic.it/carmelolamonica/default.aspx)

Leggi l'articolo intero | Make a Comment ( 2 so far )

Chiamate sincrone su Windows Phone

Posted on 2 maggio 2015. Filed under: Senza categoria |

Sappiamo tutti che l’SDK per Windows Phone permette solo chiamate asincrone, in modo che la UI resti sempre funzionante e non bloccandosi mentre scarica i dati da un servizio Web.

 

E se invece dovessimo aspettare il risultato di una chiamata per avere i dati da mandare ad un’altra chiamata? Ecco che in questo caso sono dolori.

In questo articolo vedremo quindi come effettuare delle semplici chiamate sincrone e aspettare il risultato da un’altra chiamata.

Useremo come esempio un servizio OCR per il riconoscimento dei caratteri da un biglietto da visita e dividendoli per campo Nome, Cognome, Indirizzo etc etc.

Siete curiosi? Partiamo.

Il servizio al quale ci appoggeremo per questo articolo è ABBYY Cloud OCR SDK.

Dobbiamo, prima di usare il servizio, registrare un account. Quello Free permette 50 scansioni e 250 campi, che credetemi, sono veramente pochi se dovete sviluppare un’applicazione di questo genere. Noi per i test, abbiamo dovuto creare diversi account.

Una volta che abbiamo registrato l’Account, inserendo credenziali e generalità, dobbiamo poi creare un’app. Il nome la decidiamo noi, la password ci verrà recapitata via email all’indirizzo con il quale ci siamo registrati.

Una volta che abbiamo questi parametri  li andremo a mettere su delle variabili che assieme ad altre, costituiranno la chiamata da fare al servizio.

Scarichiamo il progetto Demo e l’SDK da questo link: http://ocrsdk.com/documentation/code-samples/WindowsPhone.zip.

Questo esempio non supporta il riconoscimento campo per campo, funzionalità che andremo ad implementarla in questo articolo.

 

L’operazione si compone di tre passaggi:

1) invio della foto che contiene i dati del biglietto da visita e delle credenziali di accesso

2) invio del task ID risultante dal punto 1

3) invio dell’URL  risultante dal punto 2

 

Per il punto 1, l’URL sarà qualcosa di simile a questo:

http://cloud.ocrsdk.com/processBusinessCard?language=English,French,German,Dutch,French,Italian,PortugueseStandard,Spanish,Swedish&xml:writeFieldComponents=true&exportFormat=xml&imageSource=photo

al quale passare anche username e Password per l’autenticazione HTTP.

Il metodo è POST.

In un form HTML il codice sarebbe questo:

<form action="http://username:password@cloud.ocrsdk.com/processBusinessCard&quot; method="post" enctype="multipart/form-data">
    <input type="text" value="English,French,German,Dutch,French,Italian,PortugueseStandard,Spanish,Swedish" name="language">
  <input type="text" value="true" name="xml:writeFieldComponents">
    <input type="text" value="xml" name="exportFormat">
    <input type="text" value="photo" name="imageSource">
    <input type="text" value="true" name="correctSkew">
  <input type=’file’ name="fileContents" id="image" accept="image/jpeg, image/png"/>
    <input type="submit" value="UPLOAD CARD">
</form>

 

Il file che inviamo è questo:

prova_OCR - Copia

 

Il codice C# da implementare in una Windows Phone App  è questo:

        public Processing()
        {
            InitializeComponent();

            RestServiceClient syncClient = new RestServiceClient();
            // To create an application and obtain a password,
            // register at http://cloud.ocrsdk.com/Account/Register
            // More info on getting your application id and password at
            // http://ocrsdk.com/documentation/faq/#faq3

            // Name of application you created
            syncClient.ApplicationId = "ApplicationId";
            // Password should be sent to your e-mail after application was created
            syncClient.Password = "password";

            abbyyClient = new RestServiceClientAsync(syncClient);

            //abbyyClient.UploadFileCompleted += UploadCompleted;
            abbyyClient.TaskProcessingCompleted += ProcessingCompleted;
            abbyyClient.DownloadFileCompleted += DownloadCompleted;
        }

        private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
        {
            var imageName = "Imagehomepage.png";
            BitmapImage image = new BitmapImage(ResolutionHelper.GetImagePath(imageName));
            imgHomePage.Source = image;
           
            Stream imageStream = AppData.Instance.Image;
            if (imageStream == null)
                return;

            string localPath = "image.jpg";
            saveImageToFile(imageStream, localPath);

            ProcessingSettings settings = new ProcessingSettings();
            settings.SetLanguage("English,French,German,Dutch,French,Italian,PortugueseStandard,Spanish,Swedish");
            settings.OutputFormat = OutputFormat.xml;

            abbyyClient.ProcessBusinessCardAsync(localPath, settings, settings);
                   }

Questo è invece il codice della chiamata:

public void ProcessBusinessCardAsync(string filePath, ProcessingSettings settings, object userState)
{
    BackgroundWorker w = new BackgroundWorker();
    w.DoWork += new DoWorkEventHandler((sender, e) =>
        {
            Task task = null;
            try
            {
                task = _syncClient.ProcessBusinessCard(filePath);
                UploadCompletedEventArgs uploadArgs = new UploadCompletedEventArgs(task, userState);
                onUploadFileCompleted(sender, uploadArgs);

                // Wait until task finishes
                while (true)
                {
                    task = _syncClient.GetTaskStatus(task.Id);
                    if (!task.IsTaskActive())
                    {
                        break;
                    }
                    Thread.Sleep(1000);
                }

 

Questa è invece il codice che prepara la chiamata vera e propria:

public Task ProcessBusinessCard(string filePath)
{
     string url = "http://cloud.ocrsdk.com/processBusinessCard?language=English&exportFormat=xml&imageSource=photo&correctSkew=true&xml:writeFieldComponents=true&quot;;

     try
     {
           // Build post request
         WebRequest request = WebRequest.Create(url);
         setupPostRequest(url, request);
         writeFileToRequest(filePath, request);

         XDocument response = performRequest(request);
         Task task = ServerXml.GetTaskStatus(response);

         return task;
      }
     catch (System.Net.WebException e)
     {
         throw new ProcessingErrorException("Cannot upload file: " + e.Message + ". Please make sure that application Id and password are correct.", e);
     }
}       

 

Andiamo ora a vedere il codice che gestisce la risposta:

 

public Task GetTaskStatus(TaskId task)
{
    string url = String.Format("{0}/getTaskStatus?taskId={1}", ServerUrl,
                   Uri.EscapeDataString(task.ToString()));

    WebRequest request = WebRequest.Create(url);
    setupGetRequest(url, request);
    XDocument response = performRequest(request);
    Task serverTask = ServerXml.GetTaskStatus(response);
    return serverTask;
}

 

 

Avremo quindi un XML che sarà scaricato nella IsolatedStorage e da questo XML serve un parametro che comporrà la seconda url:

string url = String.Format("{0}/getTaskStatus?taskId={1}", ServerUrl,
                   Uri.EscapeDataString(task.ToString()));

 

Ecco un esempio di questo primo XML:

<response>

<task id="d49e7d8c-ee64-4cdf-b622-b5dda6ff2242" registrationTime="2015-04-24T04:55:15Z" statusChangeTime="2015-04-24T04:55:15Z" status="Queued" filesCount="1" credits="0" estimatedProcessingTime="5"/>

</response>

Il parametro che ci interessa è il task id.

 

La seconda chiamata avrà quindi un url simile alla seguente: http://cloud.ocrsdk.com/getTaskStatus?taskId=d49e7d8c-ee64-4cdf-b622-b5dda6ff2242 da passare in GET.

Questo ci restituirà un altro file XML che conterrà l’URL del file finale con i campi del nostro biglietto da visita.

Ecco un esempio di tale file:

<response>

<task id="d49e7d8c-ee64-4cdf-b622-b5dda6ff2242" registrationTime="2015-04-24T04:55:15Z" statusChangeTime="2015-04-24T04:55:20Z" status="Completed" filesCount="1" credits="0"resultUrl="https://ocrsdk.blob.core.windows.net/files/d49e7d8c-ee64-4cdf-b622-b5dda6ff2242.result?se=2015-04-24T15%3A00%3A00Z&sr=b&si=downloadResults&sig=Xrn3XSZ9%2F3w39fjWyeZW%2Bzu9rnJ%2BTqFfMjoz12CHszw%3D"/&gt;

</response>

 

Di questo ci interesserà l’URL https://ocrsdk.blob.core.windows.net/files/d49e7d8c-ee64-4cdf-b622-b5dda6ff2242.result?se=2015-04-24T15%3A00%3A00Z&sr=b&si=downloadResults&sig=Xrn3XSZ9%2F3w39fjWyeZW%2Bzu9rnJ%2BTqFfMjoz12CHszw%3D

che scaricherà il file xml finale.

 

Dobbiamo quindi rilevare l’URL dal file scaricato.

public void DownloadResult(Task task, string outputFile)
{
    if (task.Status != TaskStatus.Completed)
    {
        throw new ArgumentException("Cannot download result for not completed task");
    }

    try
    {
        if (task.DownloadUrl == null)
        {
            throw new ArgumentException("Cannot download task without download url");
        }

        using (IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication())
        {
            if (storage.FileExists(outputFile))
                storage.DeleteFile(outputFile);

            string url = task.DownloadUrl;

            WebRequest request = WebRequest.Create(url);
            setupGetRequest(url, request);

            using (HttpWebResponse result = (HttpWebResponse)request.GetResponse())
            {
                using (Stream stream = result.GetResponseStream())
                {
                    // Write result directly to file
                    using (Stream file = storage.OpenFile(outputFile, FileMode.Create))
                    {
                        copyStream(stream, file);
                    }
                }
            }
        }
    }
    catch (System.Net.WebException e)
    {
        throw new ProcessingErrorException(e.Message, e);
    }
}

 

Con l’URL appena calcolato andremo a scaricare un file che conterrà tutti i campi differenti da un biglietto da visita come quello sotto:

 

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ocrsdk.com/schema/recognizedBusinessCard-1.0.xsd http://ocrsdk.com/schema/recognizedBusinessCard-1.0.xsd" xmlns="http://ocrsdk.com/schema/recognizedBusinessCard-1.0.xsd">
  <businessCard>
    <field type="Mobile">
      <value>+39 334 7400969</value>
      <fieldComponents>
        <fieldComponent type="PhonePrefix">
          <value>+</value>
        </fieldComponent>
        <fieldComponent type="PhoneCountryCode">
          <value>39</value>
        </fieldComponent>
        <fieldComponent type="PhoneCode">
          <value>334</value>
        </fieldComponent>
        <fieldComponent type="PhoneBody">
          <value>7400969</value>
        </fieldComponent>
      </fieldComponents>
    </field>
    <field type="Email">
      <value>pierosbressa@crystalweb.it</value>
    </field>
    <field type="Web">
      <value>www.crystalweb.it</value>
    </field>
    <field type="Name">
      <value>Piero Sbressa</value>
      <fieldComponents>
        <fieldComponent type="FirstName">
          <value>Piero</value>
        </fieldComponent>
        <fieldComponent type="LastName">
          <value>Sbressa</value>
        </fieldComponent>
      </fieldComponents>
    </field>
    <field type="Company">
      <value>crystalweb</value>
    </field>
    <field type="Job">
      <value>Sviluppo gestionali personalizzati – Siti web e mobile apps – Corsi di informatica e programmazione – Assistenza e riparazione computer</value>
      <fieldComponents>
        <fieldComponent type="JobPosition">
          <value>Sviluppo gestionali personalizzati – Siti web e mobile apps – Corsi di informatica e programmazione – Assistenza e riparazione computer</value>
        </fieldComponent>
      </fieldComponents>
    </field>
    <field type="Text">
      <value>PIERO SBRESSA
http://www.crystalweb.it
email: pierosbressa@crystalweb.it | mobile: +39 334 7400969
Sviluppo gestionali personalizzati – Siti web e mobile apps – Corsi di
informatica e programmazione – Assistenza e riparazione computer.</value>
    </field>
  </businessCard>
</document>

 

 

Articolo scritto da Piero Sbressa (www.crystalweb.it) e Carmelo La Monica, Microsoft Contributor (http://community.visual-basic.it/carmelolamonica/default.aspx)

Leggi l'articolo intero | Make a Comment ( None so far )

Liked it here?
Why not try sites on the blogroll...